我正在尝试使用以下脚本解码霍夫曼编码的字符串:
def decode(input_string, lookup_table):
codes = lookup_table.keys()
result = bytearray()
i = 0
while len(input_string[i:]) != 0:
for code in codes:
if input_string[i:].startswith(code):
result.append(lookup_table[code])
i += len(code)
break
return ''.join((chr(x) for x in result))
lookup_table = {'10': 108, '00': 111, '0111': 114, '010': 119, '0110': 72, '1111': 33, '1110': 32, '1100': 100, '1101': 101}
input_string = '0110110110100011100100001111011001111'
print decode(input_string, lookup_table)
此脚本提供输出:
'Hello world!'
该脚本适用于此小字符串,但是解码Hamlet的编码版本需要110秒。有没有更有效,更快捷的方法来做到这一点?