删除python中优先级队列的百分比

删除python中优先级队列的百分比,python,queue,priority-queue,Python,Queue,Priority Queue,有没有一种方法可以在队列达到一定大小后移除一定百分比(比如20个)的队列 这个问题源于使用搜索算法将根母板的子节点保存在优先级队列中的问题。有太多不同的节点需要通过,因此需要20多个小时才能找到解决方案。为了更快地找到解决方案,我想对队列进行粗略的削减,以缩短节点的数量,同时冒着丢弃可能导致该目标的关键节点的风险。假设您不关心要删除哪些20%的项目,因此,我选择删除那些在队列中优先级最低的队列。我们还假设优先级队列位于Python的标准库中。最后,让我们假设这个删除是由调用例程完成的,只要它们选

有没有一种方法可以在队列达到一定大小后移除一定百分比(比如20个)的队列


这个问题源于使用搜索算法将根母板的子节点保存在优先级队列中的问题。有太多不同的节点需要通过,因此需要20多个小时才能找到解决方案。为了更快地找到解决方案,我想对队列进行粗略的削减,以缩短节点的数量,同时冒着丢弃可能导致该目标的关键节点的风险。

假设您不关心要删除哪些20%的项目,因此,我选择删除那些在队列中优先级最低的队列。我们还假设优先级队列位于Python的标准库中。最后,让我们假设这个删除是由调用例程完成的,只要它们选择这样做,而不是由优先级队列结构本身自动完成

heapq
中的优先级队列是添加了一些函数的标准Python列表。如果您的优先级队列名为
mypqueue
,则您可以删除大约20%的项目,这些项目相对于优先级较低的项目进行加权,并且

mypqueue = mypqueue[:len(mypqueue) * 4 // 5]
或者稍微短一点的选择

mypqueue[len(mypqueue) * 4 // 5:] = []
这只是将列表截断为其长度的4/5,删除列表的末尾。这是因为堆的属性在此截断中被保留,所以如果
mypqueue
是基于堆的优先级队列,它仍然是


当然,这可以转化为它自己的功能。您还可以根据Python的列表轻松创建一个新类,当队列大小达到某个数字时,该类将自动执行此操作。我将把这些留给你。

有没有关于取消20%的限制?例如,最高优先级为20%?那些是最优先的?随机的?在优先事项中平均分配?等等。另外,您指的是标准库中的--
heapq
,还是其他优先级队列?另外,您希望自动删除,还是希望监控例程在需要时调用删除?最高优先级20%是防止删除最重要节点的一个好规则。我已将priorityqueue(从队列导入)更改为heapq。这样做的速度要快得多。这将有助于我的运行时。应测试均匀分布或随机分布,以确定哪些方法更有效。由于问题非常复杂,本项目需要更多的尝试和错误。最简单的方法是在某个阈值后自动删除。您可以实现一个,它允许您删除最低优先级的20%,保留最重要的项目。一个有趣的解决方案,尽管删除的项目不一定会向最低优先级的项目加权。除去20%,您知道它们都是叶节点,但它们中的许多很有可能是相当高优先级的项目。但你确实限定了你的答案,并说,“假设你不在乎哪20%。”