> 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)以及无损音频格式中。它非常适合游程长度编码、预测残差编码以及任何近似几何或指数分布的数据。