如何使用霍夫曼编码找到压缩效率?

时间:2014-04-07 11:16:14

标签: c# compression huffman-code

我使用霍夫曼编码压缩了二进制文件。现在我试图找到压缩效率。

在我的二进制文件中,我有符号(buch为0& 1)和频率(符号重复)。 假设我有:

  • 符号:0 freq:173
  • 符号:1 freq:50
  • 符号:2 freq:48
  • 符号:3 freq:45

目前,每个符号都是在UInt64中编码的,因此如果我的计算大小的方法是正确的,那么文件的大小将是(173 + 50 + 48 + 45)* 8 = 2528字节。如果我错了,请纠正我。在调试时我得到2536,还有8个我不知道为什么?

压缩后,我得到了这样的编码

  • 符号:0代码:1
  • 符号:1代码:00
  • symbol:2代码:011
  • 符号:3代码:010

有人可以告诉我如何使用这些信息让哈夫曼压缩这个二进制文件吗?我尝试在Google上搜索,但没有二进制文件样本,他们有一些浮动类型的频率,我无法理解如何将它们与我的二进制文件相关联。

2 个答案:

答案 0 :(得分:1)

您需要简单计算最终总计的位数:

173 * 1 + 50 * 2 + 48 * 3 + 45 * 3

达到552位。转换为整个字节给出了69个字节。假设解压缩器可以知道字典等,那么压缩到69/2528或原始的约3%。假设您的输入符号(0到3)由于某种原因是64位值。

答案 1 :(得分:0)

根据提供的频率,树是错误的。它必须是0 10 110 111它始终以所有正位结束。与霍夫曼树不同的解决方案可能有效,但不能提供最佳压缩效果。