如何在C#中实现哈夫曼码压缩和解压

How to implement Huffman code compression and decompression in C#

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

主要问题是有效地编码输入文件。我不确定如何在不造成代码冲突的情况下保存编码字节(通过将 BitArray 转换为字节数组创建)?

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

我怎样才能避免这种情况,是否有更好的文件编码方式?

压缩和解压缩一个 100 万字符的文件的预期时间是多少?

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

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