本条目存在以下问题 ,请协助
改善本条目 或在
讨论页 针对议题发表看法。
此条目
缺少有关 应用 的信息。
(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://enbaike.710302.xyz/wiki/Golomb_coding (页面存档备份 ,存于互联网档案馆 )