【发布时间】:2012-08-14 09:53:26
【问题描述】:
我了解当频率彼此不同时如何创建霍夫曼树,但如果频率很少相同,我将如何绘制此霍夫曼树:
哈夫曼树的简单解释见here
我正在尝试创建的霍夫曼树的数据:
Letter Frequency
A 15%
B 15%
C 10%
D 10%
E 30%
F 20%
现在我从字母C 和D 的两个最低频率开始
.
/ \
C D
但是下一步是什么?因为我们有A 和B 的频率相同,所以我们选择哪一个?如果我们选择其中一个,那么在选择第二个时,结构会如何看待?
如果我选择B,它会是这个样子(除非我错了)
.
/ \
B .
/ \
C D
这一步之后呢???
这些也可以用 Java 和 C 编码,我试图在实现它们之前先弄清楚它们是如何工作的。
编辑
我的树是这样的:
___________|_________________
/\ |
/ \ |
F E |
/ \ |
/ \ |
B A /\
/ \
C D
网上也有例子
【问题讨论】:
-
你总是选择两个最低频率,所以你的第二步是错误的。您不会选择 CD 和 B(分别为 20% 和 15%)——您选择 A 和 B(15% 和 15%)。对于这组特定的频率,选择最低的两个频率绝不会模棱两可。然而,这可能发生。您可以拥有具有不同拓扑结构的多个不同树的频率集。然而,在应用频率的情况下,它们都具有完全相同的平均位数,并且都是最优的。
标签: java tree binary-tree huffman-code