C# 如何在C语言中实现Huffman代码的压缩和解压缩#

C# 如何在C语言中实现Huffman代码的压缩和解压缩#,c#,huffman-code,C#,Huffman Code,我有一个关于哈夫曼编码的作业,用哈夫曼编码压缩和解压文本文档。我创建了一个哈夫曼树,其中每个节点都包含带有计算出的哈夫曼代码的位数组 主要问题是有效地编码输入文件。我不知道如何保存编码的字节(通过将BitArray转换为byte array创建),而不造成代码之间的冲突 示例:有两个哈夫曼代码e=101和i=0101。当它们转换为字节时,它们表示为e=00000101和i=00000101 我如何避免这种情况,有没有更好的方法来编码文件 压缩和解压缩一个包含一百万个字符的文件的预期时间是多少 (

我有一个关于哈夫曼编码的作业,用哈夫曼编码压缩和解压文本文档。我创建了一个哈夫曼树,其中每个节点都包含带有计算出的哈夫曼代码的位数组

主要问题是有效地编码输入文件。我不知道如何保存编码的字节(通过将BitArray转换为byte array创建),而不造成代码之间的冲突

示例:有两个哈夫曼代码e=101和i=0101。当它们转换为字节时,它们表示为e=00000101和i=00000101

我如何避免这种情况,有没有更好的方法来编码文件

压缩和解压缩一个包含一百万个字符的文件的预期时间是多少


(现在我正在创建一个包含所有编码位的位数组,然后将其转换为字节[]并保存,这会占用太多的时间和内存。)

将输出视为一个位字符串,而不是字节。您将代码串联起来,每个代码具有任意数量的位,3、4、15等等,使用一个32位的整数作为位缓冲区。当累积超过8位时,输出一个字节并将其从缓冲区中删除。最后,如果剩下的字节少于8位,则用零位填充其余的字节,并写出最后一个字节。您可以通过移位和或操作来操作位缓冲区中的位。

您不应该通过填充代码来填充字节。相反,您应该考虑连接所有代码(无填充)以形成一个长的位字符串,然后一次向文件中输出八位。