|
从古至今,人们都追求言简意赅。其典范是文言文,寥寥数语就将意思表达清楚。这就是某种形式的数据压缩。数据压缩是诞生于上世纪40年代的经典信息论的两大分支之一。其思想萌芽于19世纪的摩斯码。通过对常见字符(例如E)进行短编码、罕见字符(例如Z)进行长编码,摩斯码减少了高频字符的传输时间与按键次数,降低了人力与设备损耗,提高了传输效率。在信息论中,待压数据被称为信源,数据压缩被称为信源编码。1948年香农(Shannon)在其开山之作《The Mathematical Theory of Communication》中奠定了无损数据压缩(亦称熵编码)的理论基础。同时香农也给出了熵编码的第一种实现方法,后被称为香农码。在此基础上,1949年费诺(Fano)提出了一种更优的熵编码方法,后被称为费诺码。在费诺码的基础上,1952年哈夫曼(Huffman)提出了(无复杂度约束下的)最优熵编码方法,后被称为哈夫曼码。
以上三种码的基本原理都是对每个信源符号逐个独立编码,其构造都需要对信源符号集进行排序。当信源符号集很小时,这类码的压缩冗余很大。特别地,这类码对二元信源完全失效,无法进行压缩(想象一下,如果英文只有E和Z两个字母,则无论两个字母出现频率存在多大差异,每个字母都必须使用1个比特表示)。为了解决这一问题,可以将一组信源符号整体看做一个新的信源符号进行熵编码。随着分组长度增加,新的信源符号集将逐渐增大,从而压缩冗余将逐渐减小。然而这样的操作引来了一个新问题:随着分组长度增加,新的信源符号集大小将呈指数增长,从而导致其排序复杂度也呈指数增长。因此当信源分组很长时,香农码、费诺码和哈夫曼码的指数构造复杂度无法接受。
为了解决构造复杂度问题,Elias在1963年提出了一种无需对信源符号集进行排序的熵编码方法,后被称为Elias码。在Elias码的基础上,Rissanen在1976年提出了线性构造复杂度约束下的最优熵编码方法,后被称为算术码(亦称Rissanen码)。Elias码和算术码虽然都具有线性构造复杂度,但它们要求编解码器具有无限运算精度,这在实际中不可能做到。为了解决运算精度问题,Witten在1987年提出了一套方案,后被称为Witten码,它解决了算术码实现中的工程难题,使之变为可实际运行的计算机程序。至此,算术码实际应用中遇到的所有障碍都被扫除了。此后,算术码在图像和视频压缩等场合迅速得到推广应用。Rissanen为此获得了2009年香农奖。
压缩冗余是衡量熵编码技术优劣的重要指标。2023年Drmota和Szpankowski在其专著《Analytic Information Theory》中,系统总结了各种熵编码技术的压缩冗余:香农码的压缩冗余为0.5比特,哈夫曼码的压缩冗余约为0.0573比特,Elias码的压缩冗余为1.5比特。可以明确:费诺码的压缩冗余介于香农码和哈夫曼码之间,算术码的压缩冗余介于香农码和Elias码之间。然而费诺码和算术码的精确压缩冗余长期未知。最近我们证明了一般情况下,算术码的压缩冗余约为1.0573比特,亦即比哈夫曼码多1个比特。
从一开始Witten码即被视为算术码在有限运算精度下的严格近似:随着运算精度趋于无穷大,Witten码将等同于算术码。最近我们发现这是一个错误的直觉:在某些特殊情况下,即便运算精度无穷大,Witten码仍可能比算术码多1至2个比特。在此基础上,我们对Witten码进行了修正,使之成为算术码在有限运算精度下的严格近似,亦即随着运算精度趋于无穷大,改进后的Witten码将完全等同于算术码。
除了上述熵编码技术之外,上世纪70年代还出现了基于字典的LZW(Lempel-Ziv-Welch)编码方法。一般而言LZW码压缩效率不及算术码。
指数构造复杂度熵编码 | 线性构造复杂度熵编码 | ||||||
算法 | Shannon | Fano | Huffman | Elias | Rissanen | Witten | 我们 |
提出于 | 1948 | 1949 | 1952 | 1963 | 1976 | 1987 | 2025 |
最优性 | 非最优 | 非最优 | 最优 | 非最优 | 最优 | 非最优 | 渐近最优 |
冗余 | 0.5 | 未知 | 0.0573 | 1.5 | 1.0573 | >1.0573 | ~1.0573 |
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2026-4-24 10:03
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社