Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lect_14

.pdf
Скачиваний:
8
Добавлен:
29.03.2016
Размер:
321.9 Кб
Скачать

А = {(v,p[v]) : v ÎV - {r}} .

MST_PRiM(G,w,r)

1 for (Для) каждой вершины u Î V[G]

2 do key [u] ¬ ¥

3 p[u] ¬ NIL

4 kеу[r] ¬ 0

5 Q ¬ V[G]

6 while Q ¹ 0

7 do u ¬ Extract_Min(Q)

8 for (Для) каждой вершины v Î Adj[u] 9 do if v Î Q и w(u, v) < key[v]

10then p[v] ¬ u

11key[v] ¬ w(u,v)

Производительность алгоритма Прима зависит от выбранной реализации очереди с приоритетами Q. Если реализовать ее как бинарную пирамиду (кучу), то для выполнения инициализации в строках 1-5 можно использовать процедуру Build_Min_Heap, что потребует времени О (V). Тело цикла while выполняется |V| раз, а поскольку каждая операция Extract_Min занимает время О (lg V), общее время всех вызовов процедур Extract__Min составляет

О (Vlg V). Цикл for в строках 8-11 выполняется всего О (Е) раз, поскольку сумма длин всех списков смежности равна 2|E|. Внутри цикла for проверка на принадлежность Q в строке 9 может быть реализована за постоянное время, если воспользоваться для каждой вершины битом, указывающим, находится

ли она в Q, и обновлять этот бит при удалении вершины из Q. Присвоение в строке 11 неявно включает операцию Decrease_Key над пирамидой. Время выполнения этой операции — О (lg V). Таким образом, общее время работы алгоритма Прима составляет

О (V lg V + Е lg V) = О (Е lg V), что асимптотически совпадает со временем работы рассмотренного ранее алгоритма Крускала.

Однако асимптотическое время работы алгоритма Прима можно улучшить за счет применения фибоначчиевых пирамид. Если |V| элементов организованы в фибоначчиеву пирамиду, то операцию Extract__Min можно выполнить за амортизированное время O(lgV), а операцию Decrease_Key — за амортизированное время O(1). Следовательно, при использовании фибоначчиевой пирамиды для реализации очереди с приоритетами Q общее время работы алгоритма Прима улучшается до О (Е + V lg V).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]