如果我有一组符号和频率: A - 0.1 B - 0.40 C - 0.2 D - 0.23 E - 0.15 F - 0.17
霍夫曼算法将生成仅比<1> 更强的代码字。
但是当我将频率更改为大于0.40时,它将产生长度为1或更大的 码字。如何构建一个证明,证明这是任何符号集的情况,而不仅仅是这个?
答案 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
的最大值。根据算法的工作原理,以下不等式成立:
让c
替换1-d-2a
:
此约束a
和d
的约束并不是很明显,但您可以轻松地在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