如何使用霍夫曼编码找到压缩效率
本文关键字:压缩 效率 编码 何使用 霍夫曼 | 更新日期: 2023-09-27 17:57:02
>我使用霍夫曼编码压缩了一个二进制文件。现在我试图找到压缩效率。
在我的二进制文件中,我有符号(0和1的buch)和频率(符号的重复)。假设我有:
- 符号 :0频率 : 173
- 符号 :1 频率 : 50
- 符号 :2 频率 : 48
- 符号 :3 频率 : 45
目前每个符号都以 UInt64 编码,因此如果我计算大小的方式正确,文件大小将是 (173+50+48+45)*8=2528 字节。如果我错了,请纠正我。在调试时我得到 2536,还有 8 个我不知道为什么?
压缩后我得到了这样的编码
- 符号 : 0 代码 : 1
- 符号 : 1 代码 : 00
- 符号 : 2 代码 : 011
- 符号 : 3 代码 : 010
有人可以告诉我如何使用这些信息让霍夫曼压缩这个二进制文件吗?我尝试在谷歌上搜索,但没有二进制文件样本,它们有一些浮点类型的频率,我无法理解如何将它们与我的二进制文件联系起来。
您需要简单地计算最终得到的总位数:
173 * 1 + 50 * 2 + 48 * 3 + 45 * 3
这是552位。转换为整数字节会给我们 69 个字节。所以这是压缩到 69/2528 或大约原始的 3%,假设解压缩器可以知道字典等等。出于某种原因,还假设您的输入符号(0 到 3)是 64 位值。
根据提供的频率,树是错误的。它必须是0 10 110 111
它总是以所有正位结束。与霍夫曼树不同的解决方案可能有效,但不能提供最佳压缩。