霍夫曼编码树的最大高度

问题描述

假设所有字节都被接受,用霍夫曼编码算法制作的树的最大高度是多少。

我很好奇,因为当我尝试压缩我随机生成文件时,我以某种方式设法获得了 9 位的路径。这意味着我实际上夸大了文件的大小。虽然程序中可能存在我不知道的问题。

解决方法

如果“所有字节”是指所有 256 个可能的字节值作为符号集,那么答案是最大深度以及最长代码的长度为 255。

虽然需要非常大的符号频率数字。以最小总数执行此操作的序列是卢卡斯数,其中第零个卢卡斯数 2 分成两个 1。所以:

1,1,3,4,7,11,18,29,47,76,123,199,...

其中以 4 开头的项是前两项之和,就像斐波那契数列一样。该序列中 256 个符号的最后一项是:

121020968315000050139390193037122554865361969834971243

大约 1053

至于所有可能字节的随机数据,一般情况下您无法对其进行压缩。但是,如果您得到一个长度为 9 位的代码,那么这意味着该代码至少与将 8 位分配给所有符号一样好。所以你没有扩大文件,而是让它保持相同的大小或减少一点或更多。但是,这并没有考虑到您还必须发送代码本身以便另一端的解码器可以解码的事实。这不仅会消除您获得的任何一点点压缩。