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