在构建霍夫曼树时如何选择优先级?

时间:2011-02-14 08:09:18

标签: algorithm huffman-code

假设我的角色及其频率如下:

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

为什么吗

3 个答案:

答案 0 :(得分:1)

有什么区别?暂时忽略dh,在第一种情况下你会得到

a = 00
b = 01
c = 1

在第二种情况下,

a = 10
b = 11
c = 0

只要c在最终树中的高度相同,其代码的长度就相同。

答案 1 :(得分:0)

我会把c放在更高的优先级(更短的代码)。这符合霍夫曼树的基本原则:立即结果的优先级/较短代码和更多解析的较低优先级。

答案 2 :(得分:0)

你的案子并不有趣。分支的0和1的赋值是任意的,所以你勾勒出的选择产生相同的代码,即相同的代码长度,无论如何。

然而,有一些有趣的案例,您可以选择三个或更多具有相同总频率和不同形状的组。任何选择都将产生相同的总体最佳性,即在所提供的频率下对所提供的符号进行编码的总比特数完全相同。然而,这些选择可能导致具有不同比特长度组合的不同形状树。然后可以根据需要做出这样的选择以达到更深或更浅的树木。