> elias | gamma | universal <
// Elias Gamma —— 面向正整數的通用編碼,無需額外參數
通用編碼
適用於任何正整數,不需要額外參數設定。
前綴無關
任何一段編碼都不會是另一段的前綴,因此可唯一解碼。
漸近最佳
在某些分佈下可逼近理論上的最佳壓縮率。
>> 技術說明
Elias Gamma 的運作方式:
Elias Gamma 對正整數 n 的編碼步驟為:1)計算 N = ⌊log₂(n)⌋;2)寫出 N 個 0 作為一元碼;3)接著寫出 n 的二進位表示(長度為 N+1 位)。最終得到長度為 (2N+1) 位的編碼。
編碼範例:
n=1: log₂(1)=0 編碼:1(沒有 0,只是 "1") n=2: log₂(2)=1 編碼:010(一個 0 + "10") n=5: log₂(5)=2 編碼:00101(兩個 0 + "101") n=10: log₂(10)=3 編碼:0001010(三個 0 + "1010") 長度公式:2⌊log₂(n)⌋ + 1
為什麼要使用 Elias Gamma:
- >不需要事先設定參數
- >實作簡單
- >對較小的整數特別有效
- >在資訊理論中作為通用編碼具有代表性
- >常見於資料壓縮與相關研究的理論範例
>> 常見問題
什麼是 Elias Gamma 編碼?
Elias Gamma 是 Peter Elias 提出的正整數通用編碼方式。它先以一元形式表示二進位長度,再接上整數的二進位表示,因此不必知道資料分佈,也能得到形式規整的通用編碼。
Elias Gamma 在什麼情況下較有效率?
當整數遵循冪律分佈(P(n) ∝ n^-2)時,Elias Gamma 的壓縮效率較佳。編碼長度約為 2log₂(n)+1,比特數成長較慢,對較小的數值尤其適合,對非常大的整數則相對較不節省。
Gamma、Delta、Omega 有何差異?
Elias Gamma 使用 2log₂(n)+1 位元;Delta 將長度改良為 log₂(n)+2log₂(log₂(n)+1)+1,而 Omega 在非常大的數值上又進一步提升效率。Gamma 最為簡單,Delta 適合中等大小,Omega 則比較適合極大整數。
Elias 編碼常被用在哪些地方?
Elias 系列編碼常出現在資訊理論課程、壓縮演算法論文與部分專用壓縮工具中。與 Huffman 或算術編碼相比,它們更偏向理論用途,但對理解「通用整數編碼」非常重要。