如何在C#

时间:2018-04-28 19:39:52

标签: c# huffman-code

我在Huffman Coding上有一个使用Huffman代码压缩和解压缩文本文档的作业。我创建了一个Huffman树,其中每个Node包含带有计算的Huffman代码的BitArray。

主要问题是有效地编码输入文件。我不知道如何保存编码字节(通过将BitArray转换为字节数组而创建)而不会在代码之间发生冲突?

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

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

压缩和解压缩具有1个百万字符的文件的预期时间是多少?

(现在我正在创建一个包含所有编码位的BitArray,然后将其转换为byte []并保存它,这需要花费太多时间和内存。)

1 个答案:

答案 0 :(得分:0)

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