读书人

Golomb 编码 具体算法 求

发布时间: 2012-03-30 17:32:09 作者: rapoo

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的情况:

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:0002  0:1 0:01 0:0013  10:0 0:10 0:0104  10:1 0:11 0:0115  110:0 10:00 0:1006  110:1 10:01 0:1017  1110:0 10:10 10:0008  1110:1 10:11 10:0019  11110:0 110:00 10:010 

读书人网 >软件架构设计

热点推荐