Golomb coding主要针对整数进行编码,其基本思想是对较小的数用较短的编码,对于较大的数使用较长的编码。即,达到这样一个效果,假设X为要进行编码的整数,当X趋于较小的取值时,此时的Golomb编码较短。这样可以有效的节省空间。
Golomb coding应用的范围主要是整数,尤其是小整数比较多的情况。
Golomb coding使用一个可调的参数M,将输入的值分为两部分:
q:被M除的结果
r:余数
商使用一元编码(unary coding),商后面紧跟着余数,余数使用截短的二进制编码。当M=1时,Golomb coding等价于一元编码(unary coding)。
假设对正整数X进行Golomb编码,选择参数m,令
b = 2m
q = INT((X-1)/b)
r = X - qb - 1
这样,X可以被编码为两部分:
第一部分是有q个1加上1个0组成
第二部分为m位二进制数,其值为r(r一定小于2m)
实例-1:m = 0
此时b = 20 = 1
x = 1
q = INT((x-1)/b) = INT((1-1)/1) = 0
r = x - qb - 1 = 1 - 0*1 -1 = 0
则x编码为q = 0个1,加上1个0,加上m = 0位二进制数r = 0,为:
0
x = 2
q = INT((x-1)/b) = INT((2-1)/1) = 1
r = x - qb - 1 = 2 - 1*1 -1 = 0
则x编码为q = 1个1,加上1个