我希望提高从列表或数组中删除(弹出)最小项目的速度,同时还可以动态添加项目。最大项目数是固定的,所以我可以使用初始化的 numpy 数组,但到目前为止,我已经看到 heapq 的最佳性能。下面是我的实现是 Cython,下面的虚拟代码运行大约 0.7 秒。
在 Python 中有什么更好的可能吗?我简要地查看了排序列表(https://pypi.org/project/sortedcontainers/),但没有看到性能改进。通过切换到纯 C,我会看到明显的改进吗?在我的完整代码中,我只需要使用 heappush 和 heappop 操作。
from _heapq import *
cdef int i
cdef list openHeap = []
for i in range(320000*8):
heappush(openHeap, (i, 22))
编辑:澄清一下,在完整代码中,被推送到堆的值不是任何排序或预定义的顺序(因此使用堆来有效地找到最小值)。