没有大概率字母时,霍夫曼代码的性能如何?


21

为概率分布的霍夫曼代码是具有最小加权平均码字长度的前缀码,其中是的长度个codword。一个众所周知的定理是霍夫曼码每个符号的平均长度在和,其中是Shannon熵的概率分布。p∑piℓiℓiiH(p)H(p)+1H(p)=−∑ipilog2⁡pi

典型的平均长度超过Shannon熵几乎为1的坏例子是概率分布,例如,其中熵接近0,平均码字长度为1。这给出了熵与码字长度之间的差距几乎为。{.999,.001}1

但是,当概率分布中的最大概率有界时,会发生什么?例如,假设所有概率均小于。在这种情况下,我可以找到的最大差距是概率分布,例如,其中熵略大于1,平均码字长度略小于1.5,从而得出差距接近。这是您能做到的最好的吗?在这种情况下,您能否给间隙的上限严格小于1?12{.499,.499,.002}0.5

现在,让我们考虑所有概率都非常小的情况。假设你选择了一个概率分布的字母,每个都具有概率。在这种情况下,如果选择则会出现最大的间隙。在这里,您得到大约 在所有概率都小的情况下,这是您能做的最好的吗?M1/MM≈2kln⁡2

1+ln⁡ln⁡2−ln⁡2ln⁡2≈0.08607.

这个问题是受TCS Stackexchange问​​题启发的。

Answers:


19

有很多论文可以准确地研究您提到的问题。该系列的第一篇是Gallager撰写的论文,“霍夫曼的主题变化”,IEEE-IT,第1卷。1978年第24期,第668-674页。他证明的霍夫曼码的平均码字长度和熵(他调用数量“冗余”)之间的差总是大于严格小于(=在概率分布最大概率),在壳体 p ≥ 1 / 2,并且它是小于p + 0.086,如果p < 1 / 2。更好的界限是众所周知的,您可以在引用加拉格尔著作的众多论文中找到它们。pp≥1/2p+0.086p<1/2


2
最佳边界已由Manstetten 在霍夫曼码的冗余度上的紧边界找到。
— Yuval Filmus

2

经判断的约束,我相信你想提出一个不同的问题...或者你只是没有说明如何采取的“平均”。所以我都会回答。这两个问题的答案是否定的。H(p)≤…≤H(p)+1

首先,如果您使用代码字的均匀分布定义平均代码长度,并以作为任一元素的概率上限,则考虑长度q + k的代码,其中2 q − 1个代码字的长度为q其余2 q + k - 1的长度为q + k。对于此代码完美编码的分布,平均长度接近q + k,除非您对一个元素的概率也有下限,而熵为2−qq+k2q−1q2q+k−1q+kq+k。q+k2

现在让我们考虑“平均长度”,它是指使用霍夫曼码对进行编码时的平均码字长度。这里,结合的很紧,并且示例分布在极限实现它是其中的每个元素的概率发生2 q ± 1 / 2为q ∈ ž。(为最后一个元素分配了任何剩余概率,但是它不会渐近地产生任何区别)。p2q±1/2q∈Z.

例如,考虑然后q=7.

得到甲=52,乙=76。我们的分布具有52个元素的概率2 - 6.5,76与概率2 - 7.5,和一个元件得到剩菜。A+B=128,A2+B/2≤128,maxA∈ZAA=52,B=76522−6.5762−7.5

H(X)=(52⋅6.5+76⋅7.5)/128=7.09375(52⋅0.5−76⋅0.5)/128≈0.99436QD(P‖Q)=∑pilog⁡piqi+∑(1−pi)log⁡1−pi1−qi。几天前,我发现使用它会导致切尔诺夫双面边界更紧密,如您在Wikipedia上看到的切尔诺夫边界。)


1
我对第二个例子有些困惑。如果您有128个码字,则有一个平均字长为7(实际上,所有字长均为7)的代码,这与您的熵为7.09375的说法相矛盾。该分布的熵(您可以通过加权平均值而不是平均值来获得)为6.88,而霍夫曼代码的平均长度为7。这样就得出了一个间隙(或Kullback-Liebler散度) 0.12左右,这似乎是相当多的比我的榜样,而不是接近于1−log2⁡pi
— 彼得·肖尔

确实,您是对的。我打算询问概率分布下的预期码字长度。p
— 彼得·索尔

糟糕,我对与计算有误。我们仍然希望略小于,但是要像这样将较小的条目强制进入较低的行。这给出乙甲√AB 2kA+2B=2kA= 2 − 1 / √A2+B/22kA+2B=2kA=2−1/22−1B.
— 卡尔,

实际上,这将是 ...但是这个方程组没有正解-看来我们不能强迫所有东西都是半整数幂。因此,我们可以考虑使用代替一半的霍夫曼码,而不考虑和和剩下的,给项...2 √2A+B2 1/ √2(1+X)/2ķ(1-X)/2 ķ + 1 3*2ķ1/2(1+x)/2k(1−x)/2k+13∗2k
— 卡尔

因此,请尝试此操作(不是最佳方法-我想这取决于您决定舍入或舍入的方式)。项的概率和以概率项具有熵。代替改变到项的概率和项的概率。该分布的熵为,得出6.4023,而霍夫曼码的熵在均匀下为7.5,并且因此,除非我计算错误(并且经常这样做),否则差距大约为1 / 128 128 1 / 256个7.5 64 1 / 128 √641/1281281/2567.564 1281/256个(2-1/ √1/12821281/(2 √1/256(2−1/2)(1-2 - 1.5)*7+2 - 1.5 *8=7.3535。0.951/(22)∗7.5+(1−1/(2(2)))∗5.802(1−2−1.5)∗7+2−1.5∗8=7.3535.0.95。
— 卡尔,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.