证明当频率大于0.40时,霍夫曼算法可以产生长度为1的码字

时间:2014-09-21 12:30:24

标签: algorithm proof huffman-code

如果我有一组符号和频率: A - 0.1 B - 0.40 C - 0.2 D - 0.23 E - 0.15 F - 0.17

霍夫曼算法将生成仅比<1> 更强的代码字。

但是当我将频率更改为大于0.40时,它将产生长度为1或更大的 码字。如何构建一个证明,证明这是任何符号集的情况,而不仅仅是这个?

2 个答案:

答案 0 :(得分:2)

(请注意,您的频率不会增加到1;我认为这是一个错字)

这是一个证明草图,要使所有码字大于1位,没有频率可以大于2/5。 Without loss of generality,霍夫曼树必须如下所示:

    a+b+c+d (the sum must be equal to 1)
     /   \
  a+b     c+d
  / \     / \
 a   b   c   d

我们必须证明a,b,c和d都不大于2/5。

WLOG(再次)a = b&lt; = c&lt; = d。

    2a+c+d
     /   \
   2a     c+d
  / \     / \
 a   a   c   d

让我们找到与此霍夫曼树一致的d的最大值。根据算法的工作原理,以下不等式成立:

  • a&lt; = c
  • a&lt; = d
  • 2a&gt; = c
  • 2a&gt; = d

c替换1-d-2a

  • a&lt; =(1-d)/ 3
  • a&lt; = d
  • a&gt; =(1-d)/ 4
  • a&gt; = d / 2

此约束ad的约束并不是很明显,但您可以轻松地在a / d坐标空间中绘制约束。然后,你知道上述四个不等式中哪两个是最重要的:

  

d / 2&lt; = a&lt; =(1-d)/ 3

从这里开始:

  

d / 2&lt; =(1-d)/ 3

所以d <= 2/5

答案 1 :(得分:0)

如果你有三个任何频率的符号,你将获得一个长度为1的代码和两个长度为2的代码。例如,它们的概率可能为1/3,这个数字较少比0.4。

这是一个简单的反例,它有四个符号断言,它们的概率导致长度为1的代码,其中所有概率都小于0.4:

a - 0.34
b - 0.33
c - 0.17
d - 0.16

通过简单地分解概率,很容易构造具有相同属性的更长代码。 E.g:

a - 0.34
b - 0.33
c - 0.17
d - 0.08
e - 0.08