Повышение производительности python heapq? - PullRequest
0 голосов
/ 04 августа 2020

Я хочу улучшить скорость, с которой я могу удалять (выталкивать) самый маленький элемент из списка или массива, а также добавлять элементы на лету. Максимальное количество элементов фиксировано, поэтому я мог бы использовать инициализированные массивы numpy, но до сих пор я видел лучшую производительность с heapq. Ниже моя реализация - Cython, фиктивный код ниже выполняется примерно за 0,7 секунды.

Возможно ли что-нибудь лучше в пределах Python? Я кратко просмотрел отсортированные списки (https://pypi.org/project/sortedcontainers/), но не заметил улучшения производительности. Увижу ли я заметное улучшение после перехода на чистый C? В моем полном коде мне нужно использовать только операции heappu sh и heappop.

from _heapq import *
cdef int i
cdef list openHeap = []

for i in range(320000*8):
    heappush(openHeap, (i, 22))

EDIT: Чтобы уточнить, в полном коде значения, помещаемые в кучу, не находятся в отсортированных или предопределенных порядок (следовательно, использование кучи для эффективного поиска минимального значения).

...