假设我的角色及其频率如下:
Char Freq.
a 1
b 2
c 3
d 4
e 5
f 6
g 7
h 8
构建树时,在第2步我们有:
[3] [3] [4] [5] [6] [7] [8]
/ \ c d e f g h
/ \
[1] [2]
a b
现在,由于我们有两个3,我们如何确定它们的优先级?
在霍夫曼编码中,这被视为:
[3] [3] [4] [5] [6] [7] [8]
c / \ d e f g h
/ \
[1] [2]
a b
答案 0 :(得分:1)
有什么区别?暂时忽略d
到h
,在第一种情况下你会得到
a = 00
b = 01
c = 1
在第二种情况下,
a = 10
b = 11
c = 0
只要c
在最终树中的高度相同,其代码的长度就相同。
答案 1 :(得分:0)
我会把c放在更高的优先级(更短的代码)。这符合霍夫曼树的基本原则:立即结果的优先级/较短代码和更多解析的较低优先级。
答案 2 :(得分:0)
你的案子并不有趣。分支的0和1的赋值是任意的,所以你勾勒出的选择产生相同的代码,即相同的代码长度,无论如何。
然而,有一些有趣的案例,您可以选择三个或更多具有相同总频率和不同形状的组。任何选择都将产生相同的总体最佳性,即在所提供的频率下对所提供的符号进行编码的总比特数完全相同。然而,这些选择可能导致具有不同比特长度组合的不同形状树。然后可以根据需要做出这样的选择以达到更深或更浅的树木。