问题标签 [huffman-code]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2620 浏览

c++ - 霍夫曼编码的字节频率表

我正在编写一个需要处理任意二进制文件的霍夫曼压缩器和解压缩器(在 C++ 中)。我需要一些数据结构的建议。现在,我的压缩过程如下:

  • 以二进制形式将文件的字节读取到 char* 缓冲区
  • 使用 std::map 计算文件中每个字节模式的频率。(这就是我认为我在自找麻烦的地方。)
  • 根据频率直方图构建二叉树。每个内部节点都有其子节点的频率总和,每个叶节点都有一个 char* 来表示实际字节。

这就是我目前所处的位置。

我的问题是,如果我只使用从 char* 到 int 的映射,我到底在测量什么。如果我是正确的,这实际上不是我需要的。我认为我真正在做的是使用 char* 跟踪实际的 4 字节指针值。

所以,我打算做的是对直方图使用一个映射,对存储在叶节点的数据使用一个字符。我的逻辑在这里合理吗?我的推理告诉我是的,但由于这是我第一次处理二进制数据,我想小心那些只会以奇怪方式出现的陷阱。

谢谢。

0 投票
1 回答
659 浏览

compression - 是否有 Dictionary Huffman 压缩算法的开源实现?

我正在开发一个库来处理 Mobipocket 格式的电子书文件,并且我有 LZ77 风格的 PalmDoc 解压缩和压缩工作。然而,PalmDoc 压缩只是目前在野外电子书上使用的两种当前使用的文本压缩类型之一,另一种是 Dictionary Huffman aka huffcdic。

我找到了几个huffcdic 解码算法的实现,但我希望能够压缩成相同的格式,到目前为止,我还没有找到任何例子来说明如何做到这一点。其他人是否已经弄清楚了这一点并发布了代码?

0 投票
1 回答
1014 浏览

algorithm - 优化 HTML 属性的压缩顺序

我在某处读到按特定顺序组织 HTML 属性可以提高 HTML 文档的压缩率。(我想我是从谷歌或雅虎推荐中读到的,以获得更快的网站)。如果我没记错的话,建议是将最常见的属性放在首位(例如id,等),然后按字母顺序排列其余的。

我对此有点困惑。例如,如果id将属性放在每个p标签之后,id则将包含唯一值。因此,重复的字符串将仅限于此:(<p id="假设有<p id="1">and <p id="2"/>)。因为id需要唯一的值,我认为这实际上会对压缩产生不利影响。

我错了吗?

如果我需要浏览具有随机排序属性的静态网页,我应该使用什么逻辑来组织属性以实现最大压缩?

注意:我说的是 GZIP 压缩(如果重要的话):http ://www.gzip.org/algorithm.txt

0 投票
2 回答
1365 浏览

huffman-code - 最长霍夫曼码字

我不太确定如何确定在霍夫曼编码下针对特定频率集的最长可能码字是多少?

有任何想法吗?

0 投票
2 回答
23443 浏览

javascript - 在base64编码之前缩短字符串以使其更短的无损压缩方法?

刚刚构建了一个用于预览 HTML 文档的小型 Web 应用程序,该应用程序生成 URL:s,其中包含 base64 编码数据中的 HTML(以及所有内联 CSS 和 Javascript)。问题是,URL:s 很快就会变得有点长。首先压缩字符串而不丢失数据的“事实上的”标准方式(最好是Javascript )是什么?

附言; 前段时间我在学校读到 Huffman 和 Lempel-Ziv,我记得我真的很喜欢 LZW :)

编辑:

找到解决方案;似乎 rawStr => utf8Str => lzwStr => base64Str 是要走的路。我正在进一步致力于在 utf8 和 lzw 之间实现霍夫曼压缩。到目前为止的问题是,当编码为 base64 时,太多的字符会变得很长。

0 投票
1 回答
2351 浏览

delphi - 使用 Huffman 算法解压缩压缩字符串

我正在尝试使用来自http://www.explainth.at/downloads/huff.zip的霍夫曼算法

单元中有两个功能:

函数压缩(ASource:TMemoryStream):TMemoryStream;
函数解压缩(ASource:TMemoryStream):TMemoryStream;

我已经成功地将文件中的每一行压缩到另一个文件中。

我还想将每个压缩行从文件解压缩为字符串。

这是我为解压缩字符串所做的工作

Button2Click 过程不起作用。简短的问题是如何解压缩压缩字符串

DeCompress的参数是TMemoryStream,如何使用字符串作为参数?
如何将 DeCompress 的输出设为字符串?

0 投票
5 回答
1197 浏览

c - 返回 0/fclose/free 时出现程序分段错误。我想我有内存泄漏,但找不到它们。请帮忙!

我正在尝试编写一个霍夫曼编码程序来压缩文本文件。完成后,程序将在 return 语句处终止,或者当我尝试关闭正在读取的文件时。我假设我有内存泄漏,但我找不到它们。如果你能发现它们,请告诉我(以及修复它们的方法将不胜感激!)。

(注意:small1.txt 是任何标准文本文件)

这是主程序

0 投票
3 回答
9487 浏览

python - 读取 .txt 文件并分析

我正在对任何 .txt 文件进行霍夫曼编码,所以首先我需要分析这个文本文件。我需要阅读它,然后分析。我需要像表格一样的“退出”:


信 | 频率(后面重复多少次)| 霍夫曼代码(稍后会出现)


我开始:


如何按字母顺序从文件中读取字符:

???非常感谢


但是编译器给我一个“错误”在这里输入代码

我在 for 循环中需要这个字母顺序,而不是在频率结束时......

0 投票
1 回答
235 浏览

java - Java:帮助 int[] 方法...与霍夫曼树有关

我正在制作一种为霍夫曼树创建代码字的方法。从中获取代码字的节点的符号被传递到该方法中。我不完全肯定如何去做它必须返回一个int []。我编写了我认为可能有用的代码。如何正确使用 int[] 以便创建诸如 00101 之类的输出?谢谢

好的,所以我了解初始化大小,但现在我只是想知道它是否可以使用这种方式打印出沿 01011 行或其他组合的内容,例如我在 int[] 数组中正确地增加位置的方式. 那会打印出我要找的东西吗?

0 投票
2 回答
14877 浏览

c++ - C ++ STL:使用带有priority_queue的地图

我试图通过将字母及其相应值保存到地图中然后将地图插入优先级队列来实现霍夫曼编码。尝试声明队列时出现参数转换错误。我到底应该把什么作为参数?我在这里得到的是我最好的猜测。

我觉得问这个有点愚蠢,但彻底的谷歌搜索并没有让我得到答案。非常感谢您的帮助!