繁体   English   中英

为什么霍夫曼的编码算法比原始大小占用更多位?

[英]Why Huffman's coding algorithm takes more bit than the original size?

我给定的字符串是“Today_is_Monday”。 如果我将霍夫曼的编码算法应用于这个字符串。 如果没有编码,字符串的总大小为(15*8) = 120位。 编码后大小为(10*8 + 15 + 49) = 144位。

据我所知,霍夫曼的算法用于减小尺寸。 但是为什么编码后的大小比原来的大呢?

我所做的更多细节如下在此处输入图像描述

谢谢你。

给定频率表,霍夫曼编码优化了消息长度。 您如何处理频率表取决于您。

非常短消息的应用程序通常假设发送器和接收器都事先知道的 static 频率表,因此不必发送。

需要发送频率表的应用程序通常会执行额外的优化。 可以通过按字母顺序仅传输每个符号的长度来传达树。 然后可以对长度本身进行霍夫曼编码。

文字太短,概率分布 function看起来很均匀。 如果出现频率(或多或少)相同,则输入字符串非常接近随机噪声。 用一般的方式压缩随机噪声是不可能的,压缩很可能比输入序列长,因为还需要添加一些元数据,比如编码表。

相反,考虑编码一个字符串: aaaaaaaaaaaaaaa

如果尝试对较长的通用英文文本进行编码,则会在某个时候注意到,编码后的字符串大小将开始显着短于原始文本。 这是因为编码的序列频率将开始产生更大的影响 - 最频繁的字符将使用尽可能短的代码进行编码,并且由于它重复很多,其较短的大小将支配原始字符的大小。

没有可逆压缩算法可以保证压缩所有可能的输入。 如果有,那么您可以反复输入它自己的 output 并最终将任何输入文件减少到 1 位。 对于任何初始输入文件。

因此,必须有一些输入不能被任何特定算法压缩。

正如其他人所解释的那样,您发现了霍夫曼无法压缩的输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM