数据压缩与应用
压缩的分类
当前压缩可以分为两类,即多媒体数据压缩(media-specific compression)与通用压缩(general purpose compression)
多媒体数据压缩
大多数多媒体数据压缩工具使用有损压缩算法。
一张 1024×1024 的 RGB 色彩模式的图片,其大小就有 3 MB,如果用 ASCII 码来表示字母的话,同样的空间能用来表示 3,145,728个字母。一张 1024×1024 的图片所占用的空间,可以用来存放约 6 本《霍比特人》这样篇幅的书。
有损数据转换的种类特别多,每一种都针对特定的多媒体文件(针对图像文件的就不太适用于音频文件)和内容类型(灰度图像与全彩图像使用的压缩算法同样不同)。在内容转换为更容易压缩的状态后,可以继续应用所有标准转换,例如 LZ 、BWT、RLE 以及增量编码,甚至可以使用哈夫曼编码、算术编码和 ANS。关键在于,针对某种数据类型找出最佳的转换方法,以获得最好的结果。
通用编码
通用压缩工具是设计用来压缩除多媒体数据以外的其他数据。像 DEFLATE、GZIP、BZIP2、LZMA 和 PAQ 这些算法,都是将各种无损转换结合起来,用来压缩诸如文本、源代码、序列化数据以及二进制内容等其他不能使用有损压缩工具压缩的非多媒体文件。
目前很多数据压缩研究人员认为所有这些算法都陷入了回报率递减的困境。研究主题的变化很小。它们都是在现有的转换上使用一些技巧或是进行一些改变,然后再应用到现有的压缩算法上,以获得某些小的提升,而且获得边际提升需要的资源越来越多。
数据压缩的需求
- 了解要处理的数据——要了解的不仅是数据的类型,还要了解它的内部结构,特别是它的使用方式
- 了解算法的各项指标,这样才能从中选出正确的算法系列
- 了解在给定的情况下你需要的是什么,因为有些算法能节省特别多的空间
数据压缩指标
压缩率
压缩率,即内容压缩后的大小与压缩前大小之比
压缩性能
压缩性能,即将数据转换为压缩后的形式需要多长时间。
在这个方面通常有两个评价指标:CPU 速度和内存。
编码系统的 CPU 速度之所以重要,是因为它决定了数据可以压缩得多快。而可用内存的数量之所以重要,是因为它十分有限,特别是对移动设备来说。
解压性能
在现代应用程序的开发中,解压通常是在客户端设备中进行,与服务器端相比,客户端通常存在能量不足的问题。那些能将文件压缩得最小的算法,通常也需要花最长的时间去解压,因此对需要将数据传输到移动设备上处理的应用程序来说,这些算法并不适用。
解码流的能力
实际解码中,解压算法处理的不一定是“完整的数据包”,也就是说解码前所有的数据不一定都在内存中。
魏斯曼评分
魏斯曼评分(Weissman Score),斯坦福大学的教授塔奇 • 魏斯曼(Tsachy Weissman)设计了一种度量数据压缩性能的方法,用数据集的压缩率除以其编码速度作为衡量标准。其目的是通过已知的现有编码器(如 GZIP),归一化新压缩算法的压缩率与其编码速度之商,来测试新算法的性能。通过归一化,我们就有了将某个算法与通用标准压缩工具相比较的能力,这有助于评估对于某种数据类型,哪个算法最合适。