当前位置: 首页 > 知识库问答 >
问题:

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

安博文
2023-03-14

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

在我的二进制文件中,我有符号(0的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

有人能告诉我如何使用这些信息对这个二进制文件进行哈夫曼压缩吗?我试着在谷歌上搜索,但没有二进制文件的样本,它们有一些浮点类型的频率,我无法理解如何将它们与我的二进制文件联系起来。

共有2个答案

董胡媚
2023-03-14

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

涂飞航
2023-03-14

您只需计算最终的总比特数:

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

这是552位。转换为全字节会给我们69个字节。假设解压缩器可以知道字典等,这是对69/2528或原始值的约3%的压缩。出于某种原因,还假设您的输入符号(0到3)是64位值。

 类似资料:
  • 本文向大家介绍霍夫曼编码算法,包括了霍夫曼编码算法的使用技巧和注意事项,需要的朋友参考一下 霍夫曼编码是一种无损数据压缩算法。在该算法中,分配了可变长度代码以输入不同的字符。代码长度与字符使用频率有关。最常见的字符具有最小的代码,较长的代码具有最不频繁的字符。 主要有两个部分。第一个创建霍夫曼树,另一个遍历该树以查找代码。 例如,考虑一些字符串“ YYYZXXYYX”,字符Y的频率大于X,字符Z的

  • 我试图压缩一个24位的值。但我之前没有任何压缩方面的经验。所以,我想知道是否有人可以给我一些见解或建议,如何编码和解码的24位值使用verilog或matlab。 问题:我将24位值分成6块4位。每个4位在哈夫曼树中都有一个唯一的路径。我按照这棵树查找压缩值,但我在如何解码这些值上遇到了障碍。由于树是静态的,解码器将知道它。但是,当解码器获得比特流时,它怎么知道如何解码呢。 附上一张图片来阐明我在

  • 给定一个构建的树和它工作所需的所有变量,我只需要理解如何从霍夫曼树得到一个编码树。 更具体地说,我需要返回霍夫曼树的字符串编码。不会向函数传递任何参数。它只是一个getHuffmanTreeEncoded()函数,它返回树的编码字符串,我不确定我将如何去。 我不提供这个问题的代码,因为其余的已经完成了,而且很长/对于学校来说......我想我最好用文字来理解。 我需要遍历树吗?我需要递归循环吗?我

  • 我正在为算法和数据结构课做作业。我很难理解给出的说明。我会尽力解释这个问题。 我得到的输入是一个正整数 n,后跟 n 个正整数,表示有序字符集中符号的频率(或权重)。第一个目标是构造一个树,为有序字符集的每个字符提供近似的顺序保持霍夫曼代码。我们要通过“贪婪地合并权重最小的两棵相邻树”来实现这一点。 在赋值中,我们看到传统的霍夫曼代码树是通过将权重首先插入到优先级队列中来构造的。然后通过使用 de

  • 赫夫曼树 路径和路径长度:表示树从根节点开始到达节点经过的次数,若一颗树根节点为1层,那么第K层的树的路径的长度为K-1 权: 赋予每一个节点上面特定的权重值 带权路径:带权路径等于节点的权与路径长度的乘积,为带权路径 = 权 * 路径长度 树的带权路径长度:为所有叶子节点的带权路径之和记做WPL(weight path length) 赫夫曼树huffman-tree或哈夫曼树,又称最优二叉树,

  • 我试图在MATLAB中使用哈夫曼编码压缩灰度图像,并尝试了以下代码。 我使用了一个大小为512x512的灰度图像,格式为tif。我的问题是压缩图像的大小(压缩码字的长度)比未压缩图像的大小越来越大。压缩比小于1。