編碼 | 解碼 | 壓縮

> 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 編碼特別有效。