格倫布編碼
Rice編碼
Robert F. Rice提出Rice 編碼,是以哥倫布編碼為基礎做改良而更簡易的前置碼。Rice編碼可視為適應性編碼的一種或是哥倫布編碼的特例之一。哥倫布編碼有一個可調整參數,可以是任一正整數。而Rice編碼則是此調整參數為2的次方情況時。這讓Rice編碼在電腦運算上快速許多,因為電腦上是已二進制運算為主。 Rice編碼是一種熵編碼技術,可用在影像及圖像壓縮上。
編碼的建立
哥倫布編碼使用可調整參數把輸入值分成兩部分: 商數
, 除以
的結果及余數
。 商數當做一元編碼而余數放在后面做為可縮短的二進制編碼。當
哥倫布編碼等同於一元編碼。

哥倫布-Ric編碼可想成用bin(q) 指示位置而bin (r)代表偏移。上述圖片顯現使用哥倫布-Ric對整數 N編碼,另有位置q、偏移r、參數M。 而這兩部分如下式表達,是要被編碼的數字。
and
最后偏碼結果:
是變化的位元數,在Rice編碼
則只有b位元數,而在哥倫布編碼,
會是b-1或b bits. 假設
. 如果
,則用b-1 位元數編碼r. 相反的,如果
,用b位元數編碼r'. 當M 是2的次方時,
,則所有的r值都是b個位元.
參數M是伯努利試驗函數,其中. M則是中位數或中位數+/-1,如下式:
M愈大愈難抓取
.
哥倫布編碼在分布上跟霍夫曼編碼有相同概率。
使用記號整數
哥倫布原本是用來編碼非負整數,但也可改良用來編碼任意整數,利用重新排列數值使正整數排在特定的位置。例如一串數字0, -1, 1, -2, 2, -3, 3, -4, 4 ... ,-n排在nth奇數(2n-1),而mth正數排在mth偶數(2m)。 正數對應(
),負數對應(
)。
算法
- 選擇整數作為M
- 要編碼數值N,找出下列式子
- 商數: q = int[N/M]
- 余數: r = N除以M
- 產生整體編碼
- 編碼形式 : < 商數編碼 > < 余數編碼 >
- 商數編碼
- 寫 q長度位元的1
- 寫一個0位元
- 余數編碼
- 如果M'是2的次方,編碼是二進制形式,需要
。(Rice 編碼)
- 如果M'是2的次方,編碼是二進制形式,需要
-
-
- 如果M'不是2的次方,令b = \lceil\log_2(M)\rceil</math>
- If
使用b-1 個位元編碼 r.
- If
使用b個位元 編碼
- If
- 如果M'不是2的次方,令b = \lceil\log_2(M)\rceil</math>
-
范例
設M = 10. 則 .
當選42作為編碼時,42會被拆成q=4及r=2,從上表中為q(4),r(2),編碼為11110,010,實際上不需要逗號去分隔兩部分,因為商數編碼最后的0能代表 余數編碼的起始位置。
參考:http://www.wikiwand.com/zh-sg/%E6%A0%BC%E5%80%AB%E5%B8%83%E7%B7%A8%E7%A2%BC