В документе говорится об используемой очереди приоритетов:
Учитывая эти потребности, очередь приоритетов
является привлекательным выбором, особенно потому, что эта структура данных изначально поддерживает несколько
элементы с одинаковым приоритетом (снятие с них в произвольном порядке).
Поскольку дублирующие записи не очень полезны в алгоритме, их нужно обрабатывать специально.
Функция adjust
, которая удаляет минимальный составной элемент, продолжает корректировать очередь приоритетов, пока не будет уверена, что все дубликаты минимального элемента будут удалены:
adjust table
| n <= x = adjust (PQ.deleteMinAndInsert n_ ns table)
| otherwise = table
where ...
Если текущий текущий элемент (n
) был достаточно мал, чтобы его можно было удалить, настройте вызовы снова, чтобы также проверить следующий элемент в оставшейся очереди. Только когда не осталось мелких элементов, оно перестает повторяться.