我知道如何在频率彼此不同时创建霍夫曼树,但如果几个频率相同,我将如何绘制这个霍夫曼树:
找到了霍夫曼树的简单解释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
还从网上获得了一个例子
答案 0 :(得分:3)
逐步回答您的问题。
所以你从
开始A = 15%
B = 15%
C = 10% *
D = 10% *
E = 30%
F = 20%
你选择两个最低(C + D)并加入它们(它们的总和是20。
20
/ \
C D
你现在有
A = 15% *
B = 15% *
C+D = 20%
E = 30%
F = 20%
现在你加入另外两个最低(A,B),总和为30。
20 30
/ \ / \
C D A B
你现在有
A+B = 30%
C+D = 20% *
E = 30%
F = 20% *
最低的是(C + D,F),所以你加入它们
40
/ \
F 20 30
/ \ / \
C D A B
A+B = 30% *
C+D+F = 40%
E = 30% *
下一步,与之前相同:
A+B+E = 60% *
C+D+F = 40% *
100
/ \
40 60
/ \ / \
F 20 E 30
/ \ / \
C D A B
答案 1 :(得分:2)
你将获得任何相同频率的代码。
| letter | A | B | C | D | E | F |
|-----------------|-----|-----|-----|-----|-----|-----|
| freq | 10 | 20 | 30 | 5 | 25 | 10 |
|-----------------|-----|-----|-----|-----|-----|-----|
按最大值
排序|-----------------|-----|-----|-----|-----|-----|-----|
| letter | C | E | B | F | A | D |
|-----------------|-----|-----|-----|-----|-----|-----|
| freq | 30 | 25 | 20 | 10 | 10 | 5 |
|-----------------|-----|-----|-----|-----|-----|-----|
tree creating
freq 30 10 5 10 20 25
symbol C A D F B E
| |
|--|--|
||-|
|15| = 5 + 10
2 step
freq 30 10 5 10 20 25
symbol C A D F B E
| | |
| | |
| |--|| |
|-|15|| |
||-| |
| |
| |--| |
|----|25|-| = 10 + 15
|--|
3 step
freq 30 10 5 10 20 25
sym C A D F B E
| | | | | |
| | | | | |
| | |--|| | | |
| |-|15|| | | |
| ||-| | | |
| | | | |
| | |--| | | |--| |
| |----|25|-| |-|45|-|
| ||-| ||-|
| |--| | |
|----|55|------| |
|-|| |
| |------------| |
|---| Root (100) |----|
|------------|
编码:
C = 00
A = 0100
D = 0101
F = 011
B = 10
E = 11
答案 2 :(得分:1)
选择哪个并不重要,您将得到一些不同的编码,但具有相同的概率。在某些情况下,有更多可能的方法来构建树,但这并不重要。
我编辑了图像是因为我犯了一个错误,请查看我的第二个答案是否正确。