Изменения

Перейти к: навигация, поиск

Алгоритм Прима

6 байт убрано, 07:42, 5 декабря 2011
Реализация
== Реализация ==
'''<tex>\text{MST\_PrimPrim}(V, G, w)</tex>''' '''<tex>for''' (для) всех </tex> <tex>v \in V[G]</tex> '''<tex>do''' </tex> <tex> key[v] \leftarrow \infty </tex>
<tex>p[v] \leftarrow \text{NIL}</tex>
<tex>r \leftarrow </tex> <tex> произвольная вершина в </tex><tex>V[G]</tex>
<tex>key[r] \leftarrow 0 </tex>
<tex>Q \leftarrow V[G] </tex>
'''<tex>while''' </tex> <tex> Q \neq \emptyset </tex> '''<tex>do''' </tex> <tex>u \leftarrow \text{EXTRACT-MIN}(Q) </tex> '''<tex>for''' (для) каждой вершины </tex> <tex> v \in Adj[u] </tex> '''<tex>do''' '''</tex> <tex>if''' </tex> <tex>v \in Q</tex> и <tex>key[v] > \omega(u, v) </tex> '''<tex>then''' </tex> <tex> p[v] \leftarrow u </tex>
<tex>key[v] \leftarrow \omega(u, v)</tex>
<tex>\text{DECREASE-KEY}(Q, v) </tex>
Ребра дерева восстанавливаются из его неявного вида после выполнения алгоритма.  
== Корректность ==
По поддерживаемым инвариантам после извлечения вершины <tex>v</tex> (<tex>v \neq r</tex>) из <tex>Q</tex> ребро <tex>\left(v,p(v)\right)</tex> является ребром минимального веса, пересекающим разрез <tex>\left(F,Q\right)</tex>. Значит, по [[Лемма о безопасном ребре|лемме о безопасном ребре]], оно безопасно. Алгоритм построения MST, добавляющий безопасные ребра, причём делающий это ровно <tex>|V|-1</tex> раз, корректен.
Анонимный участник

Навигация