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


21

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

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

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

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

1+lnln2ln2ln20.08607.

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

Answers:


19

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

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

例如,考虑然后q=7.

得到=52=76。我们的分布具有52个元素的概率2 - 6.576与概率2 - 7.5,和一个元件得到剩菜。A+B=128,A2+B/2128,maxAZAA=52,B=765226.57627.5

H(X)=(526.5+767.5)/128=7.09375(520.5760.5)/1280.99436QD(PQ)=pilogpiqi+(1pi)log1pi1qi。几天前,我发现使用它会导致切尔诺夫双面边界更紧密,如您在Wikipedia上看到的切尔诺夫边界。)


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

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

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

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

因此,请尝试此操作(不是最佳方法-我想这取决于您决定舍入或舍入的方式)。项的概率和以概率项具有熵。代替改变到项的概率和项的概率。该分布的熵为,得出6.4023,而霍夫曼码的熵在均匀下为7.5,并且因此,除非我计算错误(并且经常这样做),否则差距大约为1 / 128 128 1 / 256个7.5 64 1 / 128 641/1281281/2567.564 1281/256个2-1/1/12821281/21/256(21/2)1-2 - 1.5*7+2 - 1.5 *8=7.3535。0.951/(22)7.5+(11/(2(2)))5.802(121.5)7+21.58=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.