微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在霍夫曼树下找到权重

如何解决如何在霍夫曼树下找到权重

霍夫曼算法在给定符号权重的情况下得出一棵树。我要相反:给定一棵树,找出一组符号权重,这些符号权重将生成该树一棵树,每个符号的位长相同。

我知道生成同一棵树的有多个权重集,因此我想可以将权重指定为2的幂,并且可以将最长的代码分配为权重1。

(与问题无关,但目的是微调LZ77型压缩算法在内部使用的固定树,以编码偏移量和长度,检查当前位长是否合理,如果不可以,则进行调整)

解决方法

您的想象正确。但是,在执行霍夫曼算法时,两者的幂会导致很多联系。根据关系的确定方式,返回的树的拓扑结构可能与开始的树不同。但是位长都一样。

这里是一个例子:

我将这些频率用于字母:

817     A
145     B
248     C
431     D
1232    E
209     F
182     G
668     H
689     I
10      J
80      K
397     L
277     M
662     N
781     O
156     P
9       Q
572     R
628     S
905     T
304     U
102     V
264     W
15      X
211     Y
5       Z

那给了我这棵树:

original Huffman tree

然后,我根据符号在树中的深度为其分配两个幂的频率:

64      A
16      B
32      C
32      D
128     E
16      F
16      G
64      H
64      I
2       J
8       K
32      L
32      M
64      N
64      O
16      P
1       Q
64      R
64      S
128     T
32      U
16      V
32      W
4       X
32      Y
1       Z

将霍夫曼应用于这一点,我得到了一棵非常不同的树,但是其中的所有符号都具有与以前相同的深度:

new boring,imbalanced Huffman tree

我非常确定,有一种方法可以从下往上分配频率,使接下来的事情增加得足够大,以确保选择正确。这也将导致总体权重低于两个乘方的权重,更接近斐波那契数列。这是一个有趣的问题,所以现在我很想玩这个游戏。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。