关于信息熵与编码的技术疑问:熵是否随编码方式变化?如何确定系统的绝对最小熵编码?
关于信息熵与编码的技术疑问:熵是否随编码方式变化?如何确定系统的绝对最小熵编码?
首先得帮你理清一个关键误区:你并没有突破熵的下界,只是换了个「信源」来计算熵而已。
咱们先回忆下熵的定义:熵是特定信源符号概率分布对应的平均自信息量,是该信源进行无损编码时的理论最短平均码长下界。你原始的16位有符号整数序列是一个信源,它的熵基于原始数值的出现概率;而delta编码后得到的「首值+差值」序列,是一个经过变换后的新信源——这个新信源的符号(差值)分布更集中(大量小值重复),所以熵自然更低。这完全符合信息论的结论:你只是通过变换去除了原始序列中的冗余(比如相邻数值的相关性),让新信源的熵更低,进而能用更短的编码,但你并没有突破这个新信源的熵下界。
接下来回答你的核心问题:
1. 有没有办法确定系统的绝对最小熵编码?
从理论层面,绝对最小的编码长度对应的是Kolmogorov复杂度——简单来说,就是能生成该数据的最短计算机程序的长度。但遗憾的是,Kolmogorov复杂度是不可计算的(这和图灵机的停机问题等价),所以我们没法直接得到这个绝对最小值。
2. 工程上有没有逼近这个下限的算法?
当然有,而且是非常成熟的思路,本质就是「信源建模+熵编码」的组合:
- 第一步:信源建模(去除冗余)
这一步的核心是挖掘数据中的规律,把原始数据转换成更「可压缩」的符号序列。比如你用的delta编码,就是利用了相邻数据的相关性;除此之外还有:- 预测编码:比如线性预测、自适应预测,用前几个数据预测当前值,编码预测误差;
- 上下文建模:根据数据的上下文(比如前几个数值)调整概率分布,让后续符号的熵更低;
- 变换编码:对数据块做整数变换,把能量集中到少数变换系数上,再编码这些系数。
- 第二步:熵编码(逼近熵下界)
对经过建模后的符号序列,用最优的熵编码方式:- 霍夫曼编码:当符号概率是2的负幂次时,能刚好达到熵下界;
- 算术编码:不管概率分布如何,都能无限接近熵下界,是理论上最优的熵编码之一;
- ANS编码:现代常用的熵编码,性能和算术编码接近,但速度更快。
3. 这个问题算是「解决了」吗?
从理论角度,绝对最小值不可得,所以没法彻底解决;但从工程实践角度,我们已经有非常高效的算法能无限逼近这个下限。比如常见的压缩算法:
- DEFLATE(LZ77+霍夫曼):先通过LZ77做冗余去除,再用霍夫曼编码;
- zstd、brotli这类现代压缩算法:结合了更复杂的上下文建模和高效的熵编码,压缩率已经非常接近理论极限。
总结一下:你用delta编码的思路完全正确,这是信源建模的经典操作;绝对最小编码长度理论上不可计算,但工程上有成熟方法逼近它,这个领域的理论和实践都已经非常完善了。
备注:内容来源于stack exchange,提问作者2 False




