编码 | 解码 | 压缩

> rice | adaptive | compress <

// Rice 编码 —— 带可调参数的自适应整数压缩

0 个字符
0 个字符

>> 功能亮点

[自适应]

可调节参数

通过调整 k 值,针对不同数据分布优化压缩效率。

[高效]

几何分布数据

对几何或指数分布的数据特别高效。

[简单]

快速编码

依赖简单的除法与取余运算,易于实现且速度快。

>> 技术细节

Rice 编码的工作原理

Rice 编码将每个整数 n 用 2^k 相除,得到商 q 和余数 r。商使用一元编码(q 个 1 后跟一个 0),余数用 k 位二进制表示。通过调节参数 k,这种可变长编码可以根据数据分布进行自适应优化。

Rice 编码示例(k=2)

k=2, M=2^2=4

0 → q=0, r=0 → 0|00 → 000
1 → q=0, r=1 → 0|01 → 001
2 → q=0, r=2 → 0|10 → 010
3 → q=0, r=3 → 0|11 → 011
4 → q=1, r=0 → 10|00 → 1000
5 → q=1, r=1 → 10|01 → 1001
6 → q=1, r=2 → 10|10 → 1010
7 → q=1, r=3 → 10|11 → 1011
8 → q=2, r=0 → 110|00 → 11000

k 越大:一元位更少,二进制位更多
k 越小:一元位更多,二进制位更少

为什么选择 Rice 编码?

  • 可根据数据分布自适应调整
  • 实现简单、维护方便
  • 编码和解码速度都很快
  • 非常适合传感器等序列数据
  • 对小整数的压缩效率很高

>> 常见问题

什么是 Rice 编码?

Rice 编码是一种可变长的熵编码方法,对几何分布非常高效。它是 Golomb 编码的一个特例,其中除数 M 被限制为 2 的幂(M = 2^k),这样可以利用位移运算替代除法,获得更高的性能。

k 参数应该如何选择?

最优的 k 取决于数据分布。对于均值为 μ 的数据,可以近似使用 k ≈ log₂(μ × ln(2))。较小的 k(0–2)适合非常小的数值,较大的 k(4–8)更适合数值较大的数据。可以借助分析功能来寻找适合你数据的最优 k。

Rice 与 Golomb 编码有什么区别?

Rice 编码是 Golomb 编码的子集,其中 M 被约束为 2 的幂 (M = 2^k)。这一约束使 Rice 编码可以通过位移运算更快地实现,但在压缩率上可能略逊一筹。Golomb 可以自由选择 M 以获得更高压缩率,而 Rice 在压缩效率和速度之间做了折中。

Rice 编码通常用在什么场景?

Rice 编码广泛用于无损音频压缩(如 FLAC、ALAC)、图像压缩(JPEG‑LS)以及具有几何分布的传感器数据。对于概率呈指数衰减的小型非负整数,Rice 编码尤为高效。