
求帮助期末考试题,不会做,希望帮忙解答一下!求解答非常感谢!
下午好🌅🌅🌅
本答案参考通义千问
当然可以!哈夫曼树(Huffman Tree)是数据结构中非常重要的一种树形结构,常用于数据压缩中的编码问题。它的构造方法基于贪心算法,目的是让出现频率高的字符使用较短的编码,出现频率低的字符使用较长的编码,从而实现最优前缀编码。
A: 5
B: 2
C: 7
D: 3
原始数据:A:5, B:2, C:7, D:3
17
/ \
10 7 (C)
/ \
5 5
/ \ / \
B(2) D(3) A(5)
0,向右走为 1。import heapq
class Node:
def __init__(self, char, freq):
self.char = char
self.freq = freq
self.left = None
self.right = None
def __lt__(self, other):
return self.freq < other.freq
def build_huffman_tree(freq_dict):
# 创建最小堆
heap = []
for char, freq in freq_dict.items():
node = Node(char, freq)
heapq.heappush(heap, node)
# 合并节点
while len(heap) > 1:
left = heapq.heappop(heap)
right = heapq.heappop(heap)
merged = Node(None, left.freq + right.freq)
merged.left = left
merged.right = right
heapq.heappush(heap, merged)
return heapq.heappop(heap)
def generate_codes(root, current_code, codes):
if root is None:
return
if root.char is not None:
codes[root.char] = current_code
generate_codes(root.left, current_code + '0', codes)
generate_codes(root.right, current_code + '1', codes)
# 示例使用
freq_dict = {'A': 5, 'B': 2, 'C': 7, 'D': 3}
root = build_huffman_tree(freq_dict)
codes = {}
generate_codes(root, '', codes)
print("哈夫曼编码:", codes)
0,向右走为 1,记录路径即可。如果你有具体的题目,比如给出一组权重,我可以帮你一步步构造哈夫曼树,并生成对应的编码。欢迎继续提问!