我有一个程序可以读取文件并保存每个字符的频率。然后它根据每个字符的频率构造一个霍夫曼树,然后将该霍夫曼代码输出到文件中。
这样的输入就像" Hello World"将此序列输出到文件:
01010101 0010 010 010 01010 0101010 000 01010 00101 010 0001
这是有道理的,因为最常用的字符具有最短的代码。问题是,这会将文件大小增加十倍。我意识到原因是因为每个1和0在内存中表示为它自己的字符,所以它们每个都被扩展到一个字节的数据。
我在想我能做的就是将每个代码(EG" 010")转换为一个字符并将其保存到文件中 - 但这仍然会将代码填充为一个字节长(或者它会弄乱它)如果代码长于一个字节,则为up。
我该如何解决这个问题?我可以根据需要提供代码片段 - 我基本上将每个代码保存到一个字符串中,以便文件出现如此之大的原因(它输出的每个"位&&'s> #34;作为一个字节)。如果我要将代码转换为长代码,那么像00010这样的代码将表示为2,而像010这样的代码也将表示为2。
答案 0 :(得分:2)
你基本上必须一次做一个字节(或一个单词)。保持一个用位填充的字节,以及到目前为止填充了多少位的记录。当你到达8时,写下字节并重新开始。