Классический способ реализации очереди с приоритетом - использовать структуру данных под названием двоичная куча. Она позволит нам извлекать из неё элементы за O(log(n). Кучей называется дерево, в котором любой элемент не меньше своего родителя. три основные операции, производимые с кучей: Так как мы говорим про двоичную кучу, то к ней накладываются дополнительные ограничения: Двоичная куча (структура данных) — это полное двоичное дерево, удовлетворяющее свойству кучи: если узел A — это родитель узла B, то ключ узла A ≥ ключ узла B. пример min binary heap Реализация min heap на Python: class BinHeap:
def __init__(self):
self.heapList = [0]
self.currentSize = 0
# инициализируем дерево и длину дерева
def percUp(self,i):
while i // 2 > 0:
if self.heapList[i] < self.heapList[i // 2]:
tmp = self.heapList[i // 2]
self.heapList[i // 2] = self.heapList[i]
self.heapList[i] = tmp
i = i // 2
def ins