我目前正在研究压缩算法,并且遇到了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不匹配。
谢谢您的时间
答案 0 :(得分:0)
没有确定性的自适应霍夫曼版本,这是我为提出一种可能的解决方案所做的一些假设:
起初,树桩中没有分支,因此解码转义符号需要花费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。
以此类推。.在某些时候,可能必须移动节点以纠正不平衡,但显然不是在此练习中。