Изменения

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

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

14 байт добавлено, 10:33, 28 декабря 2011
Нет описания правки
'''Алгоритм Прима ''' — алгоритм поиска [[Лемма о безопасном ребре#Минимальное остовное дерево|минимального остовного дерева]] (minimum spanning tree, MST) во взвешенном неориентированном связном графе.
== Идея ==
Данный алгоритм очень похож на [[алгоритм Дейкстры]]. Будем последовательно строить поддерево <tex>F</tex> ответа в графе <tex>G</tex>, поддерживая приоритетную очередь <tex>Q</tex> из вершин <tex>G \setminus F</tex>, имеющую ключом для вершины <tex>v</tex> величину <tex>\min\limits_{u \in F, uv \in EG}w(uv)</tex> (вес минимального ребра из вершин <tex>F</tex> в вершину <tex>v</tex>). Также для каждой вершины очереди будем хранить <tex>p(v)</tex> — вершину <tex>u</tex>, на которой достигается минимум в определении ключа. Дерево <tex>F</tex> поддерживается неявно, и его множество ребер равно ребра — это пары <tex>\left\{\left(v,p(v)\right)|</tex>, где <tex>v \in G \setminus \{r\} \setminus Q\right\}</tex>, где а <tex>r</tex> — корень <tex>F</tex>. Изначально <tex>F</tex> пусто, в очереди все вершины с ключами <tex>+\infty</tex>. Выберём произвольную вершину <tex>r</tex> и присвоим её ключу <tex>0</tex>. На каждом шаге будем извлекать минимальную вершину <tex>v</tex> из приоритетной очереди и релаксировать все ребра <tex>vu</tex>, такие что <tex>u \in Q</tex>, выполняя при этом операцию <tex>\text{decrease-key}</tex> над очередью и обновление <tex>p(v)</tex>. Ребро <tex>\left(v,p(v)\right)</tex> при этом добавляется к ответу.
== Реализация ==
<tex>\text{decrease-key}(Q, u, key[u]) </tex>
Ребра дерева восстанавливаются из его неявного вида после выполнения алгоритма.
 
== Корректность ==
|style="background:#f9f9f9"|<tex>O(V\log{V}+E)</tex>
|}
 
 
==Пример работы алгоритма==
[[Файл:Prim1.jpg|right|400px|thumb|Граф "звезда" с расставленными весами ребер ]]
322
правки

Навигация