Тим Роугарден в алгоритмах 2 курса учит следующий подход к обновлению смежных вершин в мин кучи (после извлечения мин из кучи):Поддержание инвариантны Прима Алгоритм
When a vertice v is added to the MST:
For each edge (v,w) in the unexplored tree:
1. Delete w from the min heap.
2. Recompute the key[w] (i.e. it's value from the unexplored tree
to the explored one).
3. Add the value back to the heap.
Таким образом, в основном это связано удаление из куча (и heapify, который занимает O (LogN)), а затем снова вставить (опять O (LOGN))
Вместо этого, если я использую следующий подход:
For each edge (v,w) in the unexplored tree:
1. Get the position of the node in the heap(array) using HashMap -> O(1)
2. Update the value in place.
3. Bubble up or bubble down accordingly. -> O(logn)
Althou gh они одинаковы асимптотически, последний дает лучшие константы. Так это лучше, чем в курсе? Или я чего-то не хватает?
Интересный вопрос, но [Computer Stack Exchange] (http://cs.stackexchange.com) может стать для него лучшим форумом. Я мог бы даже предположить, что мода должна перенести его; кто-то из этого сообщества, вероятно, сможет обеспечить ответ высокого качества. –
Дело в том, что вы должны поддерживать свою карту хэша, которая также принимает O (logn), потому что вам может понадобиться изменить положение многих элементов. – HenryLee
@HenryLee вы можете указать мне на некоторые ссылки, где доказано, что одно обновление может приводить к числу логарифмов числа обновлений? Потому что я, кажется, не нашел его –