python - 在python中删除优先级队列的百分比
问题描述
有没有办法在队列达到一定大小后删除一定百分比(比如说 20)?
这个问题源于使用搜索算法将根父板的子节点保存在优先级队列中的问题。有这么多不同的节点要经过,需要20多个小时才能找到解决方案。我想在队列中进行粗略的削减以缩短节点的数量,以便更快地找到解决方案,但有可能会丢弃导致该目标的基本节点。
解决方案
假设您不关心要删除哪些 20% 的项目,所以我选择删除那些在队列中不成比例地具有最低优先级的项目。我们还假设优先级队列是Python 标准库中的heapq。最后,让我们假设这个删除是由调用例程完成的,无论何时他们选择这样做,而不是由优先级队列结构本身自动完成。
优先级队列heapq
是一个标准的 Python 列表,添加了一些函数。如果您的优先级队列被命名mypqueue
,您可以删除大约 20% 的项目,加权优先级较低的项目,使用
mypqueue = mypqueue[:len(mypqueue) * 4 // 5]
或稍短的替代方案,
mypqueue[len(mypqueue) * 4 // 5:] = []
这只是将列表截断为其长度的 4/5,删除列表的末尾。这是有效的,因为堆的属性保留在此截断中,所以如果mypqueue
是基于堆的优先级队列,它仍然是。
当然,这可以放入它自己的功能中。您还可以轻松地根据 Python 的列表创建一个新类,当队列大小达到一定数量时,它会自动执行此操作。我会把这些留给你。
推荐阅读
- assembly - 为什么`add cl, 2`以x86 hex打印`80 c1 02`?
- django - 如何在 Django 中获取登录用户的用户名?
- aws-cdk - 我可以使用从 cdk deploy 创建的值执行另一个脚本吗?
- javascript - 如何使用 create-react-app 进行客户端路由
- python - 如何从 Python 打印到 Zebra RW420
- python - 如何计算数组中的两个元素是否成对?
- reactjs - react-query:无论getQuery是否被缓存,是否有一个回调触发?
- dataframe - 更正格式错误的 CSV 并将更正的数据拉回数据框中
- java - 航空公司预订系统 UML 问题 - 这些方法属于哪里?
- azure - 从 .NET Core Web App 中的 Azure AD 撤消访问权限或刷新组和角色