【问题标题】:Adaptative Huffman decoding自适应霍夫曼解码
【发布时间】:2019-01-15 11:31:13
【问题描述】:
我目前正在研究压缩算法,并且遇到了 Adaptative Huffman。与“通常的”霍夫曼不同,在这个中我们不知道每个符号的频率先验。我遇到了一个我无法弄清楚的练习。
给定字母 A = {1,2,3,4,5,6,7,8} 并假设使用了自适应霍夫曼编码器,确定对应于比特流 0110010000011010 的消息
我不明白是否必须构建霍夫曼树,或者是否有其他方法不构建树,因为我试图为字母表的每个符号分配二进制代码:1 表示 000,2 表示 001, 010 为 3,011 为 4,...(基于 2^e + r = 8,e = 3 和 r = 0),但与正确的 awser 不匹配。
感谢您的宝贵时间
【问题讨论】:
标签:
encoding
compression
decoding
huffman-code
【解决方案1】:
自适应 Huffman 没有明确的版本,以下是我为提出一种可能的解决方案所做的一些假设:
- 编码器是按符号自适应的
- 树是在飞行中构建的,你从一棵空树开始
仅包含转义符号
- 转义符号的权重始终为 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。
等等..在某些时候可能需要移动节点来纠正不平衡,但显然不是在这个练习中。