问题标签 [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 投票
2 回答
11181 浏览

algorithm - 霍夫曼编码 - 标头和 EOF

我目前正致力于在 Java 中实现一个基于霍夫曼算法的程序,并且我正处于需要将编码内容输出到文件的阶段。我对如何实现解码所需的标头和 eof 有点困惑。对于我现在的标题,我有输入文件中出现的所有唯一值及其频率,但是在一些文章中我看到人们用 0 或 1 代表节点然后频率(我有点困惑因为它没有说明符号是什么)。

另外,对于我理解的EOF,我像符号一样对其进行编码,以便对其进行读取和解码,但是我不确定我可以为它使用什么绝对不会出现的值?我知道它需要 1 的权重,但不确定如何确保它实际上不在文件中。

0 投票
3 回答
5907 浏览

java - 将位的字符串表示形式转换为字节

我刚刚开始学习文件压缩,我遇到了一些障碍。我有一个应用程序,它将诸如“程序”之类的字符串编码为压缩的二进制表示"010100111111011000"(注意这仍然存储为字符串)。

现在我需要使用 a 将其写入文件系统FileOutputStream,我遇到的问题是,如何将字符串“010100111111011000”转换为 a byte[]/ bytes 以写入文件系统FileOutputStream

我以前从未使用过比特/字节,所以我在这里有点死胡同。

0 投票
2 回答
961 浏览

c - 如果目标字符串未初始化,strcpy 的行为会有所不同

我正在使用 C 语言尝试创建一个霍夫曼解码器。这段代码只有在 codearray 未初始化时才有效,否则它会给我一个分段错误。但是,valgrind 抱怨如果我这样做,codearray 是未初始化的。我用 ddd 完成了它,一旦调用 strcpy 就会发生分段错误,我不知道为什么。

这是调用函数:

0 投票
1 回答
1933 浏览

huffman-code - 如何对基数 3 进行霍夫曼编码

我的程序实现霍夫曼编码时遇到问题。在base 2中,我使用二叉树来存储codeword,但是我不知道如何处理base 3。我正在尝试使用三叉树,但不知道如何用三叉树实现它,如何添加 0,1,2 符号...

0 投票
1 回答
962 浏览

huffman-code - 进行霍夫曼压缩时如何打包位?

我正在实现一个程序来执行霍夫曼压缩/解压缩(为了学习/娱乐,所以我不想使用现有的库/程序)。

我设法构建了压缩三,所以我有一个表格,其中包含所有字符及其各自的压缩表示形式。例如:

a = 0010 b = 01101 c = 0011 d = 1101 e = 101

现在我的想法是将这些位存储到一个容器中(例如,一个 char 或 int 变量),然后将它们输出到一个文件中。

我知道如何使用按位运算将位打包/解包到 char 或 int 中。然而,我面临的问题是压缩版本中的位数与我可用的位数不匹配。

假设我想使用上表压缩字符串“abc”。我将从压缩“a”开始,因此将 0010 打包到一个 char 变量中。接下来我将压缩“b”,但这需要 5 位,而我的 char 变量上只剩下 4 位。我可以使用另一个变量,但是跟踪哪个变量使用了多少位会变得一团糟。

使用 int 可以让我使用 32 位,但是一旦我接近极限就会发生同样的问题。

0 投票
1 回答
1369 浏览

compression - JPEG 中的霍夫曼编码

这是我的 JPEG 图片十六进制内容(我在图片上标记了 FFC4 标记)。如您所见,在字节 0x01 之后有值 0xA2!这怎么可能,因为标准说 0x10 之后的下 16 个字节告诉我们每个长度有多少个代码?不可能有这么多 1 位的代码。我错了吗? JPEG 十六进制内容

0 投票
2 回答
1200 浏览

assembly - 霍夫曼算法组装

我需要编写一个程序来使用 Huffman 算法压缩/解压缩 txt 文件

我已经写过了,它适用于字符数少于缓冲区大小的文件,但它不适用于字符数更多的文件。

我的问题是将压缩缓冲区与解压缩缓冲区接口。

因此,如果压缩写入的字节数(其中包含要通过树的 1 和 0)与解压缩读取的字节数不同,则它不起作用。例如,如果压缩的缓冲区写入 200,我需要解压的缓冲区恰好读取 200 个字节。

如果我将解压缩的大小设置为读取 200,则在某处压缩将写入 200,而其他时候则小于或大于 200。

您能否建议如何跟踪每次压缩写入的字节数并将其传输到解压缩部分?

0 投票
1 回答
2745 浏览

assembly - 8086 - storing command line arguments in arrays

I'm writing an encoding/decoding .COM program using Huffman algorithm for dos 8086 (16-bit tasm or masm without using libraries), and need to store 2 command-line arguments (inputfilename and outputfilename) in arrays so that I can read the input file, apply my huffman encoding, and write to the output file.

I've read that they are stored at address 80h, where 80h contains the length of the arguments, and 81h onward the arguments themselves. So the idea is to store the first argument in inarg (and the second one in outarg, which I haven't started working on yet) The purpose of the interrupt 21h call with subroutine 9 was to check I had it right. (which is not the case)

Here is what I have so far:

With the following relevant data:

I've started with the basics without considering delimiters, and trying to get only the first argument (inarg, which is the input file name).

And it doesn't work, so I'm definitely doing something wrong. This look may like a total mess to any experienced programmer, but that's because I tried to follow resources I found on the internet without success, and therefore switch to implement it using only the concepts I understand so far. Any help would be greatly appreciated, Thank you.

0 投票
1 回答
4876 浏览

jpeg - 解析 jpeg 文件,SOS 标记

我在解析 jpeg 文件时遇到问题。当我点击 SOS(扫描开始)标记时,有几个字节意味着我不明白。在下图中,在 SOS 标记之后,有 2 个字节用于标头长度(图片上的 Ls 部分)。但是图片上的其余数据是什么意思(例如 Ns、Cs1 等......),以及纯数据从哪里开始? SOS jpeg 文件头

0 投票
1 回答
868 浏览

c# - 如何压缩由 DNA 序列组成的字母表

我想用压缩技术而不是 Huffman 和 Adaptive Huffman 算法来压缩 DNA 序列,我使用 c# 作为编程语言。任何人都可以引导我找到一个算法。注意:我想要无损压缩