如何解决如何在霍夫曼树下找到权重
霍夫曼算法在给定符号权重的情况下得出一棵树。我要相反:给定一棵树,找出一组符号权重,这些符号权重将生成该树一棵树,每个符号的位长相同。
我知道生成同一棵树的有多个权重集,因此我想可以将权重指定为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
那给了我这棵树:
然后,我根据符号在树中的深度为其分配两个幂的频率:
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
将霍夫曼应用于这一点,我得到了一棵非常不同的树,但是其中的所有符号都具有与以前相同的深度:
我非常确定,有一种方法可以从下往上分配频率,使接下来的事情增加得足够大,以确保选择正确。这也将导致总体权重低于两个乘方的权重,更接近斐波那契数列。这是一个有趣的问题,所以现在我很想玩这个游戏。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。