霍夫曼编码始终是最佳选择吗?


9

由于树必须完整,因此要求无前缀编码要求会导致树大。是否存在一个阈值,使得固定长度的非编码数据存储比编码数据更有效?


通常是“不”。对于平均数据,每个字符的频率将> 1,并且使用霍夫曼编码而不是固定长度的编码是

@arunmoezhi您能否解决我上面提供的示例?每个字符的频率大于1,但固定长度更为理想。

这个例子很有趣。但是,您能否为每个角色提供概率而不是频率的情况,并确保所有角色的概率加1

@arunmoezhi我已经包括了字符的概率和他们加起来1

Answers:


4

H(A)这个问题的熵是1.998。针对此问题的霍夫曼编码和固定长度编码均具有avg码字长度2。仅供参考,您使用霍夫曼编码获得的编码是错误的。对于此问题,霍夫曼编码还产生类似于固定长度的代码。它使用贪婪的方法。所以a没有得到代码,0而是得到了00。对使用霍夫曼编码生成的树进行返工。您应该得到的树是:在此处输入图片说明


谢谢。您能否提供某种证明,证明霍夫曼编码总是比固定长度更好,或者至少请我参考一个?

1
你可以参考Introduction to AlgorithmsCLRS。在讨论的章节中,greedy algorithms您可以获取的正式证明Huffman algorithm。它是一个冗长的证明,需要耐心阅读。

8

霍夫曼编码用两个概率的幂近似人口分布。如果真实分布确实由两个概率的幂组成(并且输入符号完全不相关),则霍夫曼编码是最佳的。如果没有,您可以使用范围编码做得更好。但是,在将特定的位集分配给输入中的特定符号的所有编码中,它是最佳的。


“近似人口分布”是什么意思?

3
假设可以发送消息,这是理论上的真实分布。理想情况下,每条消息的编码方式应与其概率的对数成正比,但由于霍夫曼码是整数位,因此隐式对应于概率为2的幂。因此是一个近似值。查找香农编码定理。

8

是的,它始终是最佳选择。

不,没有阈值可以使用更少的空间来使用固定长度的非编码数据。

我在网上找到了许多证明,但是Wikipedia文章Huffman编码中有足够的讨论。

这也涵盖了实现更高压缩率的其他技术(在霍夫曼代码最佳的空间之外工作)。

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.