Golomb 编码 具体算法 求高手指点

我爱小土豆 2011-09-12 08:34:08
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

我按照上述所说的方法算出来的结果和此表不太一样 求高手 帮忙解决 不知道是他给出的表格或者狮子不对还是我太笨
...全文
121 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
我爱小土豆 2011-09-13
  • 打赏
  • 举报
回复
我后来又查了一些资料,发现是式子给错了。我找到了正确的式子,b=2^m,这样上面我给出的表格就对了,不管怎么说谢谢你了啊
panghuhu250 2011-09-12
  • 打赏
  • 举报
回复
m=0时,b=2*m=0, q = int((x-1)/0) = ?

下面是我算得x=1..9, m = 1,2,3的情况:

>>> 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

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧