Python-Huffman位压缩
我需要帮助。我做了一个哈夫曼压缩程序。例如,我输入“google”,我可以这样打印:Python-Huffman位压缩,python,list,nodes,Python,List,Nodes,我需要帮助。我做了一个哈夫曼压缩程序。例如,我输入“google”,我可以这样打印: Character | Frequency | Huffman Code ------------------------------------ 'g' | 2 | 0 'o' | 2 | 11 'l' | 1 | 101 'e' | 1 |
Character | Frequency | Huffman Code
------------------------------------
'g' | 2 | 0
'o' | 2 | 11
'l' | 1 | 101
'e' | 1 | 100
我还需要打印组合位,因此如果我使用,它将:
011101100
这是错误的,因为据我所知,哈夫曼压缩应该是:
011110101100
Character | Frequency | Huffman Code
------------------------------------
'g' | 2 | 0
'o' | 2 | 11
'o' | 2 | 11
'g' | 2 | 0
'l' | 1 | 101
'e' | 1 | 100
因此,我的输出应该是:
011110101100
Character | Frequency | Huffman Code
------------------------------------
'g' | 2 | 0
'o' | 2 | 11
'o' | 2 | 11
'g' | 2 | 0
'l' | 1 | 101
'e' | 1 | 100
基本上,我需要根据我输入的内容来显示它。所以,如果我输入“test”,它也应该用相应的位垂直打印test,因为我只是附加这些位并显示它们。我如何做到这一点?以下是打印部分:
freq = {}
for c in word:
if c in freq:
freq[c] += 1
else:
freq[c] = 1
freq = sorted(freq.items(), key=lambda x: x[1], reverse=True)
if check:
print (" Char | Freq ")
for key, c in freq:
print (" %4r | %d" % (key, c))
nodes = freq
while len(nodes) > 1:
key1, c1 = nodes[-1]
key2, c2 = nodes[-2]
nodes = nodes[:-2]
node = NodeTree(key1, key2)
nodes.append((node, c1 + c2))
nodes = sorted(nodes, key=lambda x: x[1], reverse=True)
if check:
print ("left: %s" % nodes[0][0].nodes()[0])
print ("right: %s" % nodes[0][0].nodes()[1])
huffmanCode = huffman(nodes[0][0])
print ("\n")
print (" Character | Frequency | Huffman code ")
print ("---------------------------------------")
for char, frequency in freq:
print (" %-9r | %10d | %12s" % (char, frequency, huffmanCode[char]))
另外,我知道我不应该对它们进行排序,我会删除排序部分,别担心