有没有好的方法来删除类queue.PriorityQueue()
中的值而不损坏优先级队列?我想在理论上我可以做一个循环,将所有的值,直到我达到我需要的,并插入所有其他的回到一个没有包括删除的节点。这看起来像是过度杀伤。有没有更好的办法?在Python中寻找优先级队列中的值
编辑:我试图做一个节点的优先级队列与关键是成本到达所述节点。如果我找到一个更便宜的方法到达节点,我想用更便宜的成本替换优先级队列。
有没有好的方法来删除类queue.PriorityQueue()
中的值而不损坏优先级队列?我想在理论上我可以做一个循环,将所有的值,直到我达到我需要的,并插入所有其他的回到一个没有包括删除的节点。这看起来像是过度杀伤。有没有更好的办法?在Python中寻找优先级队列中的值
编辑:我试图做一个节点的优先级队列与关键是成本到达所述节点。如果我找到一个更便宜的方法到达节点,我想用更便宜的成本替换优先级队列。
queue
模块及其类是主要用于同步(多线程/多处理)的工具,而不是纯数据结构。
也许你会发现任何答案this question适合您的需求,或直接使用heapq
直接。
不,不存在删除优先队列中任意值的好方法。您只能从优先队列中提取顶部(最小/最大)元素。
设置数据结构(平衡二叉搜索树)会更好,因为您可以在O(log n)中找到并删除节点。
也许,但如果你想查看其他值,那么PriorityQueue不是你想要的数据结构。告诉我们更多关于用例的信息:你是否想要找到top-n,第n个最大的还是什么?无论如何,听起来你确实需要其他一些数据结构。 – smci
这肯定表明数据结构或算法的选择存在问题。 – perreal
我加了一些说明...... – David