6.4.1. Реализовать структуру данных, которая имеет все те же
операции, что массив длины n, а именно
6.4.2. Приоритетная очередь -- это очередь, в которой важно не
то, кто встал последним (порядок помещения в нее не играет
роли), а кто главнее. Более точно, при помещении в очередь
указывается приоритет помещаемого объекта (будем считать
приоритеты целыми числами), а при взятии из очереди выбирается
элемент с наибольшим приоритетом (или один из таких элементов).
Реализовать приоритетную очередь так, чтобы помещение и взятие
элемента требовали логарифмического числа действий (от размера
очереди).
t:= номер добавленного элемента {инвариант: в дереве любой предок приоритетнее потомка, если этот потомок - не t} while t - не корень и t старше своего отца do begin | поменять t с его отцом end;
Если очередь образуют граждане, стоящие в вершинах дерева, т. е. за каждым стоит двое, а перед каждым (кроме первого) -- один, то смысл этого алгоритма ясен: встав в конец, приоритетный гражданин начинает пробираться к началу, вытесняя впереди стоящих -- пока не встретит более приоритетного.
Замечание. Приоритетную очередь естественно использовать при моделировании протекающих во времени процессов. При этом элементы очереди -- это ожидаемые события, а их приоритет определяется временем, когда они произойдут.