You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于信息熵与编码的技术疑问:熵是否随编码方式变化?如何确定系统的绝对最小熵编码?

关于信息熵与编码的技术疑问:熵是否随编码方式变化?如何确定系统的绝对最小熵编码?

首先得帮你理清一个关键误区:你并没有突破熵的下界,只是换了个「信源」来计算熵而已。

咱们先回忆下熵的定义:熵是特定信源符号概率分布对应的平均自信息量,是该信源进行无损编码时的理论最短平均码长下界。你原始的16位有符号整数序列是一个信源,它的熵基于原始数值的出现概率;而delta编码后得到的「首值+差值」序列,是一个经过变换后的新信源——这个新信源的符号(差值)分布更集中(大量小值重复),所以熵自然更低。这完全符合信息论的结论:你只是通过变换去除了原始序列中的冗余(比如相邻数值的相关性),让新信源的熵更低,进而能用更短的编码,但你并没有突破这个新信源的熵下界。

接下来回答你的核心问题:

1. 有没有办法确定系统的绝对最小熵编码?

从理论层面,绝对最小的编码长度对应的是Kolmogorov复杂度——简单来说,就是能生成该数据的最短计算机程序的长度。但遗憾的是,Kolmogorov复杂度是不可计算的(这和图灵机的停机问题等价),所以我们没法直接得到这个绝对最小值。

2. 工程上有没有逼近这个下限的算法?

当然有,而且是非常成熟的思路,本质就是「信源建模+熵编码」的组合:

  • 第一步:信源建模(去除冗余)
    这一步的核心是挖掘数据中的规律,把原始数据转换成更「可压缩」的符号序列。比如你用的delta编码,就是利用了相邻数据的相关性;除此之外还有:
    • 预测编码:比如线性预测、自适应预测,用前几个数据预测当前值,编码预测误差;
    • 上下文建模:根据数据的上下文(比如前几个数值)调整概率分布,让后续符号的熵更低;
    • 变换编码:对数据块做整数变换,把能量集中到少数变换系数上,再编码这些系数。
  • 第二步:熵编码(逼近熵下界)
    对经过建模后的符号序列,用最优的熵编码方式:
    • 霍夫曼编码:当符号概率是2的负幂次时,能刚好达到熵下界;
    • 算术编码:不管概率分布如何,都能无限接近熵下界,是理论上最优的熵编码之一;
    • ANS编码:现代常用的熵编码,性能和算术编码接近,但速度更快。

3. 这个问题算是「解决了」吗?

从理论角度,绝对最小值不可得,所以没法彻底解决;但从工程实践角度,我们已经有非常高效的算法能无限逼近这个下限。比如常见的压缩算法:

  • DEFLATE(LZ77+霍夫曼):先通过LZ77做冗余去除,再用霍夫曼编码;
  • zstd、brotli这类现代压缩算法:结合了更复杂的上下文建模和高效的熵编码,压缩率已经非常接近理论极限。

总结一下:你用delta编码的思路完全正确,这是信源建模的经典操作;绝对最小编码长度理论上不可计算,但工程上有成熟方法逼近它,这个领域的理论和实践都已经非常完善了。

备注:内容来源于stack exchange,提问作者2 False

火山引擎 最新活动