数据压缩——有益无害(11)

JPEG格式在图片上效果良好,但对音频和音乐文件呢?这些文件也能使用有损压缩去压缩,而且使用了相同的基本思想:抛弃对成品影响很小的信息。MP3和AAC等流行音乐压缩格式通常使用和JPEG一样的高级方法。音频也会被划分成块,每个块都会被单独压缩。在JPEG中,以特定方式变化的块能用少量数字形容。不过,音频压缩格式也能利用与人耳有关的已知事实。特别是,有些种类的声音对人只有很小的影响或没有影响,因此压缩算法能在不降低输出质量的情况下消除这些声音。

压缩算法的起源

本章描述的同前把戏——用于ZIP文件中的压缩方法之一——以LZ77算法为计算机科学家所熟知。这一算法由两位以色列计算机科学家亚伯拉罕·伦佩尔(Abraham Lempel)以及雅各布·齐夫(Jacob Ziv)于1977年发表。

不过,要追溯压缩算法的起源,我们需要把科学史向前推30年。我们已经了解了克劳德·香农,那位以其1948年论文创建信息理论领域的贝尔实验室科学家。香农是纠错码故事中(第五章)的两位主要英雄之一,但他以及他于1948年发表的论文在压缩算法的出现上也扮演了重要角色。

这并非偶然。事实上,纠错码和压缩算法是同一枚硬币的两面。两者都来自冗余的想法,我们在第五章详细介绍了冗余的概念。如果一个文件有冗余,它就比必要的长度长。这里重复一个第五章的简单例子,文件可以使用单词“.ve”来代替数字“5”。那样的话,像“.vq”这样的错误就能被轻易识别和纠正。因此,纠错码能被视为向消息或文件中添加冗余的原则性方法。

压缩算法正好相反:它们会从消息或文件中移除冗余。很容易想象一个压缩算法会注意到文件中经常使用单词“.ve”,并用一个更短的符号取代它(甚至有可能是符号“5”),正好反转了纠错码过程。在现实中,压缩和纠错并不会像这样彼此抵消。相反,好的压缩算法会移除低效冗余,而纠错编码会增加另一种更高效的冗余。因此,首先压缩一条信息,再往里面添加一些纠错码非常常见。

再说回香农,他于1948年发明的重要论文除了许多卓越贡献之外,还包含对最早期压缩技术之一的描述。麻省理工学院教授罗伯特·法诺(Robert Fano)大约在同时发明了这一技术,这一方法现在以香农—法诺编码(Shannon-Fano coding)命名。事实上,香农—法诺编码是一种实施更短符号把戏的特殊方法,我们在本章前面描述了更短符号把戏。我们很快就会知道,香农—法诺编码很快就被另一种算法取代,但这一方法非常有效,并存活到了今天,成为ZIP文件格式的可选压缩方法之一。

香农和法诺都意识到,尽管他们的方法都既实用又高效,但却不是最好的算法:香农通过算术证明了肯定有更好的压缩技术存在,但还未找到实现它们的方法。同时,法诺在麻省理工教授一门信息理论的研究生课程,他将实现优化压缩的问题作为该课程学期论文的可选项之一。出人意料的是,法诺的一位学生解决了这一问题,得到了一种针对每个符号取得最佳可能压缩的方法。这名学生就是大卫·霍夫曼,他的技术——现在以霍夫曼编码来命名——则是更短符号把戏的另一个例子。霍夫曼编码仍然是一种基础压缩算法,被广泛用于通信和数据存储系统。

下一章

读书导航