Return 到原文 Python 遍历霍夫曼树
Return to the Original Text by Traversing Huffman Tree in Python
我正在尝试在我的程序中使用 Huffman。我正在使用此代码 here 从输入文本生成代码。
我按照他们的解释使用它,例如:
message='man the stand banana man'
huffman.codebook(collections.Counter(message).items())
这将为文本生成一棵树并为每个字符分配代码。树显示为 dict
.
huffTree= {'m': '0111', 'a': '10', 'n': '00', ' ': '111', 't': '1101', 'h': '0101', 'e': '0100', 's': '0110', 'd': '11001', 'b': '11000'}
我应用它来生成比特流:
bitStream = []
for ch in message:
bitStream.append(huffTree[ch])
那么从句子生成的比特流是:011110001111101010101001110110110110001100111111000100010001011101111000
我现在要的是如何return遍历python中的树生成的码流到原文中。我尝试了很多方法来解决这个问题,但无济于事,而且这一步没有明确的解决方案。
知道霍夫曼编码是 prefix code 我们可以利用它来解码您的比特流:
# Create a lookup map
lookup = { v:k for k,v in huffTree.items()}
# The decode function
def huffman_decode(msg):
left = 0
decoded = ''
for right in range(len(msg)+1):
token = msg[left:right]
if token in lookup:
decoded += lookup[token]
left = right
return decoded
huffman_decode(bitStream) #'man the stand banana man'
我正在尝试在我的程序中使用 Huffman。我正在使用此代码 here 从输入文本生成代码。 我按照他们的解释使用它,例如:
message='man the stand banana man'
huffman.codebook(collections.Counter(message).items())
这将为文本生成一棵树并为每个字符分配代码。树显示为 dict
.
huffTree= {'m': '0111', 'a': '10', 'n': '00', ' ': '111', 't': '1101', 'h': '0101', 'e': '0100', 's': '0110', 'd': '11001', 'b': '11000'}
我应用它来生成比特流:
bitStream = []
for ch in message:
bitStream.append(huffTree[ch])
那么从句子生成的比特流是:011110001111101010101001110110110110001100111111000100010001011101111000
我现在要的是如何return遍历python中的树生成的码流到原文中。我尝试了很多方法来解决这个问题,但无济于事,而且这一步没有明确的解决方案。
知道霍夫曼编码是 prefix code 我们可以利用它来解码您的比特流:
# Create a lookup map
lookup = { v:k for k,v in huffTree.items()}
# The decode function
def huffman_decode(msg):
left = 0
decoded = ''
for right in range(len(msg)+1):
token = msg[left:right]
if token in lookup:
decoded += lookup[token]
left = right
return decoded
huffman_decode(bitStream) #'man the stand banana man'