自适应霍夫曼解码

时间:2019-01-15 11:31:13

标签: encoding compression decoding huffman-code

我目前正在研究压缩算法,并且遇到了Adaptative Huffman。与“通常的”霍夫曼不同,在这一本书中,我们不知道每个符号先验出现的频率。我遇到了一个我无法弄清楚的练习。

  

给定字母A = {1,2,3,4,5,6,7,8}并假设使用自适应霍夫曼编码器,确定与比特流0110010000011010对应的消息

我不知道是否必须构建霍夫曼树,或者是否有其他方法可以不构建树,因为我试图为二进制符号分配二进制代码:1代表000,2代表001, 3代表010,4代表011,...(基于2 ^ e + r = 8,e = 3且r = 0),但与正确的awser不匹配。

谢谢您的时间

1 个答案:

答案 0 :(得分:0)

没有确定性的自适应霍夫曼版本,这是我为提出一种可能的解决方案所做的一些假设:

  • 编码器是按符号自适应的
  • 树是在飞行中建立的,您从一棵空树开始, 仅包含转义符号
  • 转义符号的权重始终为0
  • 左分支为代码位0,右分支为1

起初,树桩中没有分支,因此解码转义符号需要花费0位。

接下来,接收到文字代码011 => 4 。添加了两个新节点:父节点(权重1)和符号4(代码0,权重1)。转义符号的代码为1,权重为0。

接下来,代码0被解码=> 4 ,符号4的权重为2。

接下来,代码0被解码=> 4 ,符号4的权重为3。

接下来,代码1被解码=>转义。接收到文字代码000 => 1 。添加了两个新节点:父节点(权重1)和符号1(代码10,权重1)。转义符号的代码为11,权重为0。

以此类推。.在某些时候,可能必须移动节点以纠正不平衡,但显然不是在此练习中。