Реализация очереди с приоритетами на Python. Позволяет добавлять элементы, указывая для каждого из них приоритет, чтобы быстро, за константное время, находить элемент с наименьшим (либо наибольшим) приоритетом. Добавление, извлечение элементов, а также изменение приоритета уже имеющихся в очереди элементов осуществляется за логарифмическое время.
Библиотека предоставляет класс HeapDict. В зависимости от параметра maxheap, создаётся коллекция,
оптимизированная для быстрого поиска минимального или максимального элементов. Класс реализует
интерфейс словаря, ключами которого считаются добавляемые в очередь элементы, а значениями —
приоритеты этих элементов. При этом, все добавляемые элементы должны быть уникальными и хэшируемыми,
а их приоритеты — сравнимыми между собой. Единственное отличие от словаря заключается в логике
работы метода popitem
— он извлекает пару из элемента и приоритета с наименьшим (либо
наибольшим) приоритетом. Также, для удобства добавлен метод peekitem
, возвращающий
соответствующую пару, но не извлекающую её из коллекции.
from heapdict import HeapDict
heapdict = HeapDict({'x': 20, 'y': 5, 'z': 10})
print(heapdict) # HeapDict({'x': 20, 'y': 5, 'z': 10})
print(heapdict.peekitem()) # ('y', 5)
print(heapdict.popitem()) # ('y', 5)
print(heapdict) # HeapDict({'x': 20, 'z': 10})
print(heapdict.peekitem()) # ('z', 10)
heapdict['z'] = 50
print(heapdict.peekitem()) # ('x', 20)