> elias | gamma | universal <
// Elias Gamma —— 面向正整数的通用编码,无需额外参数
通用编码
对任意正整数都适用,不需要额外参数。
前缀无关
没有任何一段编码是另一段的前缀,因此可唯一解码。
渐近最优
在某些分布下可以逼近理论最优压缩率。
>> 技术说明
Elias Gamma 的工作原理:
Elias Gamma 对正整数 n 的编码步骤为:1)计算 N = ⌊log₂(n)⌋;2)写出 N 个 0 作为一元编码;3)紧接着写出 n 的二进制形式(长度为 N+1 位)。最终得到长度为 (2N+1) 位的代码。
编码示例:
n=1: log₂(1)=0 编码:1(没有 0,仅 "1") n=2: log₂(2)=1 编码:010(一个 0 + "10") n=5: log₂(5)=2 编码:00101(两个 0 + "101") n=10: log₂(10)=3 编码:0001010(三个 0 + "1010") 长度公式:2⌊log₂(n)⌋ + 1
为什么使用 Elias Gamma:
- >不需要预先设定参数
- >实现简单
- >对较小的整数效果很好
- >作为通用编码在信息论中具有重要地位
- >在数据压缩研究中经常被用作理论基准
>> 常见问题
什么是 Elias Gamma 编码?
Elias Gamma 是 Peter Elias 提出的正整数通用编码方案。它先用一元形式表示二进制长度,再接上整数本身的二进制表示。因此无需了解数据分布,也可以得到通用而规范的编码。
Elias Gamma 什么时候更高效?
当整数服从幂律分布(P(n) ∝ n^-2)时,Elias Gamma 的效率最好。编码长度大约为 2log₂(n)+1,比特数随 n 的增大缓慢增长,对较小数值尤其合适,对非常大的整数则相对欠佳。
Gamma、Delta、Omega 有什么区别?
Elias Gamma 使用 2log₂(n)+1 比特。Delta 将长度改进为 log₂(n)+2log₂(log₂(n)+1)+1,比大数更节省;Omega 在非常大的数上进一步改进。Gamma 最简单,Delta 适合中等大小的数,Omega 更适合超大整数。
Elias 编码常用在哪里?
Elias 系列编码常出现在信息论教材、数据压缩论文以及某些实验性或专用的压缩算法中。相较于 Huffman 或算术编码,它们更偏理论工具,但对理解“通用编码”概念非常重要.