Изменения

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

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

1291 байт убрано, 00:53, 22 декабря 2011
Отмена правки 14769 участника 192.168.0.2 (обсуждение)
== Идея ==
Данный алгоритм очень похож на [[алгоритм Дейкстры]]. Будем последовательно строить поддерево <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)|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> V </tex> - вершины. <tex> E </tex> - ребра.
В <tex>F</tex> мы будем неявно хранить поддерево ответа. Для каждой вершины в ответе мы будем хранить вершину из которой мы в нее пришли.
То есть <tex>(v,previos(v))</tex>
Хранить <tex>V</tex> мы будем в приоритетной очереди. Ключом для вершины <tex>v</tex> будет вес минимального ребра из v в вершины уже содержащиеся в ответе. То есть <tex>v</tex> <tex>\min\limits_{u \in F, uv \in E}w(uv)</tex>.
Сначала выберем первую вершину искомого остового дерева. Ее мы можем выбрать рандомно. Положим ее в ответ и удалим из <tex>V</tex>.
На каждой итерации мы будем выбирать из <tex>V</tex> вершину с минимальным ключом и добавлять ее к ответу, убирая ее из <tex>V</tex>.
 
== Реализация ==
'''<tex>\text{Prim}(G, w)</tex>'''
322
правки

Навигация