【问题标题】:How to implement Huffman code compression and decompression in C#如何在 C# 中实现 Huffman 代码压缩和解压
【发布时间】:2018-10-09 08:40:27
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 你不应该填充你的代码来填满字节。相反,您应该考虑将所有代码(没有填充)连接起来形成一长串位,然后一次将八位输出到您的文件中。

标签: c# huffman-code


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-06
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    相关资源
    最近更新 更多