Tree 我的哈夫曼编码程序产生了一个更大的文件

Tree 我的哈夫曼编码程序产生了一个更大的文件,tree,compression,huffman-code,Tree,Compression,Huffman Code,我刚完成自己的哈夫曼编码程序。 它可以完美地编码和解码(解压缩后返回完全相同的文件) 问题是压缩后的结果文件比以前大 例如,我压缩了一个1.8MB的图像文件,但我的压缩文件大约是14MB。但是在我解压后,它恢复到1.8MB 我的压缩文件中的数据是: “1”和“0”记录原始文件的数据 最后一行是DFS-POST order存储的我的树结构。(叶节点标记为l,内部节点标记为i,例如,“la”是带有字符“a”的叶节点;“i”是内部节点。) 每个节点由新行分隔 如何更有效地存储哈夫曼树以使压缩文件更小?

我刚完成自己的哈夫曼编码程序。 它可以完美地编码和解码(解压缩后返回完全相同的文件) 问题是压缩后的结果文件比以前大

例如,我压缩了一个1.8MB的图像文件,但我的压缩文件大约是14MB。但是在我解压后,它恢复到1.8MB

我的压缩文件中的数据是:

  • “1”和“0”记录原始文件的数据
  • 最后一行是DFS-POST order存储的我的树结构。(叶节点标记为l,内部节点标记为i,例如,“la”是带有字符“a”的叶节点;“i”是内部节点。)
  • 每个节点由新行分隔

  • 如何更有效地存储哈夫曼树以使压缩文件更小?

    我在这里假设您将数据作为
    1和
    0的字符串写入文件。这意味着每个字符存储为8位,并且文件更大。要将字符串
    1
    0
    转换为字节,请尝试以下方法(这是python,请根据您使用的语言进行调整):

    compressed
    是要压缩的文本字符串

    我们把它分成8块循环

    对于每个chunck,它都会转换为一个以2为底的整数,对应于一个字节。这些字节被添加到数组中


    要使其工作,您的原始文本sting必须在8之前设计好,因此最后一位没有剩余内容,因此您可能必须用一些额外的字符填充您的Orrion数据。

    我在这里假设您将数据写入文件的字符串是
    1
    0
    。这意味着每个字符存储为8位,并且文件更大。要将字符串
    1
    0
    转换为字节,请尝试以下方法(这是python,请根据您使用的语言进行调整):

    compressed
    是要压缩的文本字符串

    我们把它分成8块循环

    对于每个chunck,它都会转换为一个以2为底的整数,对应于一个字节。这些字节被添加到数组中


    要使其正常工作,您的原始文本字符串必须在8之前设计好,因此最后一位没有任何剩余内容,因此您可能必须用一些额外字符填充您的Orrion数据。

    顺便说一句,我使用的是二进制文件。您肯定是将数据存储为二进制,而不是作为文件中的字符串,由于您压缩的文件比预期的大8倍。非常感谢您的帮助,Jon。也许这是个愚蠢的问题,但您能告诉我如何将这些“1”和“0”字符串转换为二进制吗?请参阅python Bellow中的完整解释我使用二进制文件的方式。您肯定将数据存储为二进制而不是文件中的字符串,由于您压缩的文件比预期的大8倍。非常感谢您的帮助,Jon。也许这是一个愚蠢的问题,但您能告诉我如何将这些“1”和“0”字符串转换为二进制吗?请参阅python bellow中的完整解释
    byte_array = bytearray()
    for i in range(0, len(compressed), 8):
        byte_array.append(int(compressed[i:i + 8], 2))