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

2024-05-13 16:32:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: 方法目标数量节点队列解决方案关键百分比
1条回答
网友
1楼 · 发布于 2024-05-13 16:32:36

假设您不关心要删除的项目的20%,所以我选择删除队列中优先级不相称地最低的项目。我们还假设优先级队列是Python标准库中的heapq。最后,我们假设这个删除是由调用例程执行的,只要它们选择这样做,而不是由优先级队列结构本身自动执行。你知道吗

heapq中的优先级队列是添加了一些函数的标准Python列表。如果您的优先级队列被命名为mypqueue,那么您可以删除大约20%的项,针对优先级较低的项进行加权,并使用

mypqueue = mypqueue[:len(mypqueue) * 4 // 5]

或者稍微短一点

mypqueue[len(mypqueue) * 4 // 5:] = []

这只是将列表截断为其长度的4/5,删除列表的结尾。这是因为堆的属性在这个截断中被保留,所以如果mypqueue是基于堆的优先级队列,它仍然是。你知道吗

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

相关问题 更多 >