某些给定的结构(例如矩阵、二叉树等)都要既定的常规遍历方式,例如我们可以逐行遍历矩阵(或者按前、中、后序遍历二叉树)。但是,有些时候又要求我们按照一种非同寻常的方法遍历结构,或者从一种奇异的(non-trivial)视角来考虑结构中存储的元素。这种类型的题目在LeeCode中并不鲜见,而且它们在实际应用中也广泛存在,其中最具代表性的就是矩阵的ZigZag遍历在图像JPEG压缩编码中的应用。更多有趣有用的数据结构与算法设计知识还可以参考《算法之美:隐匿在数据结构背后的原理》一书(本书繁体中文版已授权博硕文化出版集团在中国台湾地区发行)。
1. 图像压缩编码中的Z字排序(题号:498)
JPEG(Joint Photographic ExpertsGroup)是一种常见的图像文件格式,也是目前静态图像中压缩比最高的一种图像文件格式,它综合运用了多种压缩技术而达到一种极高的压缩比例。JPEG是作为一个国际数字图像压缩标准,压缩技术十分先进,它用有损压缩方式去除冗余的图像和彩色数据,获取得极高的压缩率的同时能展现十分丰富生动的图像。目前,它已被广泛地应用与多媒体和网络程序中。通常,在JEPG编码过程中,有一个非常重要的步骤,即Z字形编排过程。Z字形编排过程大致是这样的:经过前期处理的图像被分为若干个 的小图像块,此时就从小图