Golomb 编码 具体算法 求
Golomb 编码 具体算法 求高手指点
b = 2m
q = INT((x - 1)/b)
r = x - qb - 1
则 x 可以被编码为两部分,第一部分是由 q 个 1 加 1 个 0 组成,第二部分为 m 位二进制数,其值为 r。我们将 m = 0, 1, 2, 3 时的 Golomb 编码表列出:
值 x m = 0 m = 1 m = 2 m = 3
-------------------------
1 0 0 0 0 00 0 000
2 10 0 1 0 01 0 001
3 110 10 0 0 10 0 010
4 1110 10 1 0 11 0 011
5 11110 110 0 10 00 0 100
6 111110 110 1 10 01 0 101
7 1111110 1110 0 10 10 0 110
8 11111110 1110 1 10 11 0 111
9 111111110 11110 0 110 00 10 000
我按照上述所说的方法算出来的结果和此表不太一样 求高手 帮忙解决 不知道是他给出的表格或者狮子不对还是我太笨
------解决方案--------------------
m=0时,b=2*m=0, q = int((x-1)/0) = ?
下面是我算得x=1..9, m = 1,2,3的情况:
b = 2m
q = INT((x - 1)/b)
r = x - qb - 1
则 x 可以被编码为两部分,第一部分是由 q 个 1 加 1 个 0 组成,第二部分为 m 位二进制数,其值为 r。我们将 m = 0, 1, 2, 3 时的 Golomb 编码表列出:
值 x m = 0 m = 1 m = 2 m = 3
-------------------------
1 0 0 0 0 00 0 000
2 10 0 1 0 01 0 001
3 110 10 0 0 10 0 010
4 1110 10 1 0 11 0 011
5 11110 110 0 10 00 0 100
6 111110 110 1 10 01 0 101
7 1111110 1110 0 10 10 0 110
8 11111110 1110 1 10 11 0 111
9 111111110 11110 0 110 00 10 000
我按照上述所说的方法算出来的结果和此表不太一样 求高手 帮忙解决 不知道是他给出的表格或者狮子不对还是我太笨
------解决方案--------------------
m=0时,b=2*m=0, q = int((x-1)/0) = ?
下面是我算得x=1..9, m = 1,2,3的情况:
- Python code
>>> def golomb(x, m): ... b = 2*m ... q = int((x-1.0)/b) ... r = x - q*b - 1 ... l = bin(r)[2:] ... return '1'*q+'0' + ':' + '0'*(m-len(l))+l >>> print "\n".join(str(x)+" "+" ".join(golomb(x, i) for i in range(1, 4)) for x in range(1, 10)) 1 0:0 0:00 0:000 2 0:1 0:01 0:001 3 10:0 0:10 0:010 4 10:1 0:11 0:011 5 110:0 10:00 0:100 6 110:1 10:01 0:101 7 1110:0 10:10 10:000 8 1110:1 10:11 10:001 9 11110:0 110:00 10:010