python - 优先队列未在树中正确添加数据
问题描述
我正在尝试在 python 中实现霍夫曼编码算法,但是当我尝试在树中添加节点数据时,我没有得到正确的输出值?
这是我到目前为止添加节点的代码:
n = 6
charArray = ['a','b','c','d','e','f']
charFreq = [45,13,12,16,9,5]
Heap = []
for i in range(0, n):
lol = HuffmanNode()
lol.setDataC(charFreq[i], charArray[i])
lol.left = None
lol.right = None
heapq.heappush(Heap, lol)
root = HuffmanNode()
root = None
while (len(Heap) > 1):
x = HuffmanNode()
x = heappeak(Heap)
heapq.heappop(Heap)
print("X data")
print(x.data)
y = HuffmanNode()
y = heappeak(Heap)
heapq.heappop(Heap)
print("Y data")
print(y.data)
f = HuffmanNode()
f.data = x.data + y.data
print("f data")
print(f.data)
f.c = '-'
f.left = x
f.right = y
root = f
heapq.heappush(Heap, f)
我得到输出:
X data
5
Y data
9
f data
14
X data
14
Y data
16
f data
30
X data
30
Y data
12
f data
42
X data
42
Y data
13
f data
55
X data
55
Y data
45
f data
100
f:00000
e:00001
d:0001
c:001
b:01
a:1
什么时候应该:
X data
5
Y data
9
f data
14
X data
12
Y data
13
f data
25
X data
14
Y data
16
f data
30
X data
25
Y data
30
f data
55
X data
45
Y data
55
f data
100
a:0
c:100
b:101
f:1100
e:1101
d:111
出于某种原因,它在堆中再次读取 14 并且不知道为什么?任何帮助都会很棒
解决方案
推荐阅读
- python - 使用 tensorflow 进行量化后训练(无 tflite)
- c# - 无法连接到 SQL Server
- performance - Flutter Long list 性能不佳
- javascript - 使用 handlebars.js 重用组件
- python - PyQT5的OpenGL FrameBuffer离屏、在屏渲染问题
- broadleaf-commerce - 我的阔叶商务管理视图的功能少于现场演示中的功能
- c# - 通过按钮单击事件复制 DataGridView
- python-3.x - 如何仅在 django 主页上添加到购物车后才显示过滤的项目?
- sql - 我有这个查询来获取统计信息,但是从 1M 条记录中返回结果需要 10 多秒。我该如何优化它?
- google-apps-script - 根据所选工作表在侧边栏下拉列表中获取列标题