在python中,堆使用什么数据结构
我正在为在python中,堆使用什么数据结构,python,data-structures,heap,Python,Data Structures,Heap,我正在为Udacity课程编写一个自定义堆实现,需要一个通过堆索引和元素键返回元素度量值的堆 我得到了一个包含元组(Metric,Key)的堆列表 但是为了通过key获得正确的元素,我必须创建一个单独的映射,并为堆中的每个更改维护它的有效性 因此,最终,我不得不将map传递给所有函数,而不是具有两个参数的函数,如heapup(heap,i) 我想知道是否有更简单的方法通过程序、列表和字典来实现这一点。或者需要堆对象来隐藏其中的映射 def heapup(L, i, map): if
Udacity
课程编写一个自定义堆实现,需要一个通过堆索引和元素键返回元素度量值的堆
我得到了一个包含元组(Metric,Key)
的堆列表
但是为了通过key获得正确的元素,我必须创建一个单独的映射,并为堆中的每个更改维护它的有效性
因此,最终,我不得不将map传递给所有函数,而不是具有两个参数的函数,如heapup(heap,i)
我想知道是否有更简单的方法通过程序、列表和字典来实现这一点。或者需要堆对象来隐藏其中的映射
def heapup(L, i, map):
if i == 0: return i # we reached the top!
if i >= len(L): return i
if L[parent(i)] > L[i]:
# print "going up"
(L[i], L[parent(i)]) = (L[parent(i)], L[i])
map[L[i][1]] = i
map[L[parent(i)][1]] = parent(i)
return up_heapify(L, parent(i), map)
else:
# print "going down"
if leaf(L,i): return i
if one_child(L,i): return i # we could only come this way
if L[i] > L[left(i)]: # compare with left child
(L[i], L[left(i)]) = (L[left(i)], L[i])
map[L[i][1]] = i
map[L[left(i)][1]] = left(i)
return left(i)
if L[i] > L[right(i)]: # compare with right child
(L[i], L[right(i)]) = (L[right(i)], L[i])
map[L[i][1]] = i
map[L[right(i)][1]] = right(i)
return right(i)
我希望在该函数中去掉map,但仍然能够通过其键从堆中获取项值,现在可以这样做:
item = heap[map[key]]
例如:
如果
然后
所以我可以得到如下元素的值:
L[map['G']]
这将为我提供4个使用heapq的说明:
“此模块提供堆队列算法的实现,也称为优先级队列算法。”恐怕我真的不明白您在做什么。什么是地图?在这种情况下,“度量”是什么意思?你能展示一下到目前为止你已经创建的代码吗?我不确定你想要什么,但是请看详细的问题。基本上,L由元组(x,y)组成,其中x-是一个度量,y是元素的键。正如您所看到的,每次更改堆中元素的位置时,我都必须更新映射。这将允许我按如下键从堆中获取元素:heap[map[Key]@Blckknght metric是用于对堆中的元素进行排序的数值
map = {'A':0, 'D':1, 'G': 2, ...}
L[map['G']]