本條目存在以下問題 ,請協助
改善本條目 或在
討論頁 針對議題發表看法。
此條目
缺少有關 应用 的信息。
(2022年12月27日 ) 請擴充此條目 相關信息。討論頁 可能有詳細細節。
格倫布編碼 (英語:Golomb coding )是一種無失真資料壓縮方法,由數學家所羅門·格倫布 在1960年代提出。其優點為易於編碼與解碼,另外對於擁有機率分布為幾何分佈
G
(
p
)
,
p
=
0.5
,
{\displaystyle G(p),p=0.5,}
的資料,格倫布編碼是最佳的前綴碼 ,且能無限逼近該資料的熵 ,目前廣泛用於無損影像壓縮 。
編碼的建立
令輸入值為正整數
n
{\displaystyle n}
,參數值為正整數
M
{\displaystyle M}
,輸出值格倫布碼為
c
{\displaystyle c}
,其中
c
{\displaystyle c}
由兩種編碼組合而成,
c
=
(
u
,
b
)
{\displaystyle c=(u,b)}
,
u
{\displaystyle u}
:一进制 編碼,
b
{\displaystyle b}
:截斷二進制編碼 。
計算
u
{\displaystyle u}
與
b
{\displaystyle b}
。
q
=
⌊
n
m
⌋
,
{\displaystyle q=\left\lfloor {\frac {n}{m}}\right\rfloor ,}
r
=
n
−
q
{\displaystyle r=n-q}
。
將
q
{\displaystyle q}
做一进制 編碼,
r
{\displaystyle r}
做截斷二進制編碼 即可得到
(
u
,
b
)
{\displaystyle (u,b)}
。
格倫布-萊斯編碼中的商數
q
{\displaystyle q}
指示了所在區塊,而
r
{\displaystyle r}
指示所在區塊內部的位置。如上圖,對整數
N
{\displaystyle N}
做格倫布-萊斯編碼,
q
{\displaystyle q}
代表區塊、
r
{\displaystyle r}
表示區塊內部位置、
M
{\displaystyle M}
為參數,每個區塊的大小皆相等且長度為
M
{\displaystyle M}
,特別注意當編碼方式為格倫布-萊斯編碼時,即
M
{\displaystyle M}
為
2
{\displaystyle 2}
的整數次方,所有
r
{\displaystyle r}
的 編碼長度相等。
參數
M
{\displaystyle M}
是伯努利過程 的函數,其中伯努利過程 的參數
p
{\displaystyle p}
定義為
p
=
P
(
X
=
0
)
{\displaystyle p=P(X=0)}
,則
M
{\displaystyle M}
的所在區間為此伯努利過程 的中位數 -1到中位數+1之間。如下式:
(
1
−
p
)
M
+
(
1
−
p
)
M
+
1
≤
1
<
(
1
−
p
)
M
−
1
+
(
1
−
p
)
M
.
{\displaystyle (1-p)^{M}+(1-p)^{M+1}\leq 1<(1-p)^{M-1}+(1-p)^{M}.}
當
M
{\displaystyle M}
足夠大時,我們可以將其表示成,
M
=
⌊
−
1
log
2
(
1
−
p
)
⌋
{\displaystyle M=\left\lfloor {\frac {-1}{\log _{2}(1-p)}}\right\rfloor }
。
格倫布編碼主要是針對非負整數進行編碼,但也可以使用重疊(Overlap)與交錯(Interleave)擴展至對所有整數進行編碼。令一串用於編號的數列,(0,1,2,...),給予非負整數偶數編號,給予負整數奇數編號,使得排列方式如下,(0,-1,1,-2,2,...),即非負整數
x
{\displaystyle x}
映射 至
{
x
′
|
x
′
=
2
|
x
|
,
x
≥
0
}
{\displaystyle \{x^{\prime }|x^{\prime }=2|x|,x\geq 0\}}
,負整數
y
{\displaystyle y}
映射 至
{
y
′
|
y
′
=
2
|
y
|
−
1
,
y
<
0
}
{\displaystyle \{y^{\prime }|y^{\prime }=2|y|-1,y<0\}}
。
萊斯編碼
萊斯編碼(Rice coding,由Robert F. Rice所提出),為一種前綴碼 ,歸屬於格倫布編碼的子集合,參數
M
{\displaystyle M}
為
2
{\displaystyle 2}
的整數次方,即
M
=
2
R
,
R
∈
N
{\displaystyle M=2^{R},R\in N}
。此種特例未必是所有格倫布編碼中的最佳編碼方式,但由於目前電腦為二進位運算,萊斯編碼能快速且有效地以二進位運算實現。
性質
格倫布編碼為一種范氏霍夫曼編碼 。
演算法
選擇參數
M
{\displaystyle M}
待編碼數值為
n
{\displaystyle n}
,計算:
商數:
q
=
⌊
n
m
⌋
,
{\displaystyle q=\left\lfloor {\frac {n}{m}}\right\rfloor ,}
餘數:
r
=
n
−
q
{\displaystyle r=n-q}
。
編碼
商數編碼,對
q
{\displaystyle q}
進行一进制編碼,得到
u
{\displaystyle u}
。
餘數編碼,對
r
{\displaystyle r}
進行截斷二進制編碼 ,得到
b
{\displaystyle b}
。
合併,
c
=
(
u
,
b
)
{\displaystyle c=(u,b)}
。
輸出
c
=
(
u
,
b
)
{\displaystyle c=(u,b)}
範例
設 M = 10。則
b
=
⌈
log
2
(
10
)
⌉
=
4
{\displaystyle b=\lceil \log _{2}(10)\rceil =4}
.
2
b
−
M
=
16
−
10
=
6
{\displaystyle 2^{b}-M=16-10=6}
商數編碼
q
輸出位元
0
0
1
10
2
110
3
1110
4
11110
5
111110
6
1111110
⋮
{\displaystyle \vdots }
⋮
{\displaystyle \vdots }
N
111
⋯
111
⏟
N
0
{\displaystyle \underbrace {111\cdots 111} _{N}0}
餘數編碼
r
偏移
二進位
輸出位元
0
0
0000
000
1
1
0001
001
2
2
0010
010
3
3
0011
011
4
4
0100
100
5
5
0101
101
6
12
1100
1100
7
13
1101
1101
8
14
1110
1110
9
15
1111
1111
選擇42作為編碼時,42會被拆成
q
=
4
{\displaystyle q=4}
及
r
=
2
{\displaystyle r=2}
,編碼為11110010,而商數編碼尾數必為0,能標示商數編碼位元的結束。
參考來源
Golomb, S.W. (1966). , Run-length encodings. IEEE Transactions on Information Theory, IT--12(3):399--401 (页面存档备份 ,存于互联网档案馆 )
R. F. Rice (1971) and R. Plaunt, , "Adaptive Variable-Length Coding for Efficient Compression of Spacecraft Television Data, " IEEE Transactions on Communications, vol. 16(9), pp. 889–897, Dec. 1971. (页面存档备份 ,存于互联网档案馆 )
R. F. Rice (1979), "Some Practical Universal Noiseless Coding Techniques, " Jet Propulsion Laboratory, Pasadena, California, JPL Publication 79—22, Mar. 1979.
Witten, Ian Moffat, Alistair Bell, Timothy. "Managing Gigabytes: Compressing and Indexing Documents and Images." Second Edition. Morgan Kaufmann Publishers, San Francisco CA. 1999 ISBN 1-55860-570-3
David Salomon. "Data Compression",ISBN 0-387-95045-1 .
S. Büttcher, C. L. A. Clarke, and G. V. Cormack. Information Retrieval: Implementing and Evaluating Search Engines (页面存档备份 ,存于互联网档案馆 ). MIT Press, Cambridge MA, 2010.
https://en.wikipedia.org/wiki/Golomb_coding (页面存档备份 ,存于互联网档案馆 )