编码 | 解码 | 压缩

> elias | gamma | universal <

// Elias Gamma —— 面向正整数的通用编码,无需额外参数

[UNIVERSAL]

通用编码

对任意正整数都适用,不需要额外参数。

[PREFIX-FREE]

前缀无关

没有任何一段编码是另一段的前缀,因此可唯一解码。

[ASYMPTOTIC]

渐近最优

在某些分布下可以逼近理论最优压缩率。

>> 技术说明

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 或算术编码,它们更偏理论工具,但对理解“通用编码”概念非常重要.

其他语言