2014-05-19 38 views
1

有没有好的方法来删除类queue.PriorityQueue()中的值而不损坏优先级队列?我想在理论上我可以做一个循环,将所有的值,直到我达到我需要的,并插入所有其他的回到一个没有包括删除的节点。这看起来像是过度杀伤。有没有更好的办法?在Python中寻找优先级队列中的值

编辑:我试图做一个节点的优先级队列与关键是成本到达所述节点。如果我找到一个更便宜的方法到达节点,我想用更便宜的成本替换优先级队列。

+2

也许,但如果你想查看其他值,那么PriorityQueue不是你想要的数据结构。告诉我们更多关于用例的信息:你是否想要找到top-n,第n个最大的还是什么?无论如何,听起来你确实需要其他一些数据结构。 – smci

+0

这肯定表明数据结构或算法的选择存在问题。 – perreal

+0

我加了一些说明...... – David

回答

2

queue模块及其类是主要用于同步(多线程/多处理)的工具,而不是纯数据结构。

也许你会发现任何答案this question适合您的需求,或直接使用heapq直接。

0

不,不存在删除优先队列中任意值的好方法。您只能从优先队列中提取顶部(最小/最大)元素。

设置数据结构(平衡二叉搜索树)会更好,因为您可以在O(log n)中找到并删除节点。