编码 | 解码 | 优化

> golomb | 最优 | 压缩 <

// Golomb 编码 —— 通过灵活的除数实现整数的最优压缩

0 个字符
0 个字符

>> 功能特性

[最优]

可调除数

可自由选择 M 值,以获得最高压缩效率。

[高效]

截断二进制

在编码余数时使用尽可能少的比特。

[通用]

通用用途

适用于任意非负整数分布的场景。

>> 技术细节

Golomb 编码的工作原理

Golomb 编码将每个整数 n 除以除数 M,得到商 q 和余数 r。商使用一元编码,余数使用截断二进制编码,对 M 个可能取值使用尽量少的比特,从而为参数 p = 1/M 的几何分布构造出最优前缀码。

Golomb 编码示例(M=5)

M=5, b=⌈log₂(5)⌉=3, c=2³-5=3

0 → q=0, r=0 → 0|00 → 000(r<3 使用 2 比特)
1 → q=0, r=1 → 0|01 → 001(r<3 使用 2 比特)
2 → q=0, r=2 → 0|10 → 010(r<3 使用 2 比特)
3 → q=0, r=3 → 0|110 → 0110(r≥3 使用 3 比特)
4 → q=0, r=4 → 0|111 → 0111(r≥3 使用 3 比特)
5 → q=1, r=0 → 10|00 → 1000
6 → q=1, r=1 → 10|01 → 1001
7 → q=1, r=2 → 10|10 → 1010

截断二进制:r<3 使用 2 比特,r≥3 使用 3 比特

为什么使用 Golomb 编码

  • 对几何分布具有理论最优性
  • 支持灵活的 M 参数
  • 比特使用量最小化
  • 实现简单,易于集成
  • 在工程中被广泛验证

>> 常见问题

什么是 Golomb 编码?

Golomb 编码是一种针对几何分布设计的、最优的前缀无歧义可变长编码。它使用可调参数 M 将整数分解为商和余数,商用一元码表示,余数用截断二进制表示,从而对满足 P(n) = (1-p)^n × p 的数据实现高效压缩。

如何选择 M 参数?

最优的 M 取决于数据的几何参数 p。对于均值为 μ 的数据,可近似取 M ≈ μ + 1。对于参数为 p 的指数衰减概率,最优 M = ⌈-1/log₂(1-p)⌉。可以使用“分析”功能,根据你的实际数据自动寻找合适的 M。

什么是截断二进制编码?

截断二进制是一种在编码 M 个可能值时最小化平均比特数的方法。如果 M 是 2 的幂,就使用标准二进制;否则部分值使用 ⌊log₂M⌋ 比特,部分值使用 ⌈log₂M⌉ 比特,同时保证编码可唯一解码并且平均长度最短。

Golomb 编码通常用于哪些场景?

Golomb 编码广泛应用于 JPEG-LS 图像压缩、H.264 视频编码(其中的 Exp-Golomb)以及无损音频格式中。它非常适合游程长度编码、预测残差编码以及任何近似几何或指数分布的数据。