我没有写这个代码。我试图从中画出一棵哈夫曼树,但我想要父节点的值,并将它们与二进制代码一起放入一个列表中。我怎样才能做到这一点?你知道吗
import heapq
from collections import defaultdict
def encode(frequency):
heap = [[weight, [symbol, '']] for symbol, weight in frequency.items()]
heapq.heapify(heap)
while len(heap) > 1:
lo = heapq.heappop(heap)
hi = heapq.heappop(heap)
for pair in lo[1:]:
pair[1] = '0' + pair[1]
for pair in hi[1:]:
pair[1] = '1' + pair[1]
heapq.heappush(heap, [lo[0] + hi[0]] + lo[1:] + hi[1:])
return sorted(heapq.heappop(heap)[1:], key=lambda p: (len(p[-1]), p))
data="ALL PEOPLE SEEM TO NEED DATA PROCESSING."
frequency = defaultdict(int)
for symbol in data:
frequency[symbol] += 1
huff = encode(frequency)
print ("Symbol".ljust(10) + "Weight".ljust(10) + "Huffman Code")
for p in huff:
print(p[0].ljust(10) + str(frequency[p[0]]).ljust(10) + p[1])
使用海龟链接到哈夫曼树的图片:https://imgur.com/a/Ql0QIDD
我从中编写了一个完整的哈夫曼编码器,其中包括编码的二进制:
你可以通过取消对打印的注释来看到一棵树,但是如果你还想找什么,请告诉我。你知道吗
相关问题 更多 >
编程相关推荐