Алгоритм Прима
Алгоритм Прима — алгоритм построения минимального остовного дерева взвешенного связного неориентированного графа. Алгоритм впервые был открыт в 1930 году чешским математиком Войцехом Ярником, позже переоткрыт Робертом Примом в 1957 году, и, независимо от них, Э. Дейкстрой в 1959 году.
Содержание |
[править] Описание
Построение начинается с дерева, включающего в себя одну (произвольную) вершину. В течение работы алгоритма дерево разрастается, пока не охватит все вершины исходного графа. На каждом шаге алгоритма к текущему дереву присоединяется самое лёгкое из рёбер, соединяющих вершину из построенного дерева, и вершину не из дерева.
[править] Вход
- Связный неориентированный граф

[править] Выход
- Множество T рёбер минимального остовного дерева
[править] Пример
| Изображение | Множество выбранных вершин U | Ребро (u,v) | Множество невыбранных вершин V \ U | Описание |
|---|---|---|---|---|
| {} | {A,B,C,D,E,F,G} | Исходный взвешенный граф. Числа возле ребер показывают их веса, которые можно рассматривать как расстояния между вершинами. | ||
| {D} | (D,A) = 5 V (D,B) = 9 (D,E) = 15 (D,F) = 6 |
{A,B,C,E,F,G} | В качестве начальной произвольно выбирается вершина D. Каждая из вершин A, B, E and F соединина с D единственным ребром. Вершина A — ближайшая к D, и выбирается как вторая вершина вместе с ребром AD. | |
| {A,D} | (D,B) = 9 (D,E) = 15 (D,F) = 6 V (A,B) = 7 |
{B,C,E,F,G} | Следующая вершина — ближайшая к любой из выбранных вершин D или A. B удалена от D на 9 и от A — на 7. Расстояние до E равно 15, а до F — 6. F является ближайшей вершиной, поэтому она включается в дерево F вместе с ребром DF. | |
| {A,D,F} | (D,B) = 9 (D,E) = 15 (A,B) = 7 V (F,E) = 8 (F,G) = 11 |
{B,C,E,G} | Аналогичным образом выбирается вершина B, удаленная от A на 7. | |
| {A,B,D,F} | (B,C) = 8 (B,E) = 7 V (D,B) = 9 cycle (D,E) = 15 (F,E) = 8 (F,G) = 11 |
{C,E,G} | В этом случае есть возможность выбрать либо C, либо E, либо G. C удалена от B на 8, E удалена от B на 7, а G удалена от F на 11. E — ближайшая вершина, поэтому выбирается E и ребро BE. | |
| {A,B,D,E,F} | (B,C) = 8 (D,B) = 9 цикл (D,E) = 15 цикл (E,C) = 5 V (E,G) = 9 (F,E) = 8 цикл (F,G) = 11 |
{C,G} | Здесь доступны только вершины C и G. Расстояние от E до C равно 5, а до G — 9. Выбирается вершина C и ребро EC. | |
| {A,B,C,D,E,F} | (B,C) = 8 цикл (D,B) = 9 цикл (D,E) = 15 цикл (E,G) = 9 V (F,E) = 8 цикл (F,G) = 11 |
{G} | Единственная оставшаяся вершина — G. Расстояние от F до нее равно 11, от E — 9. E ближе, поэтому выбирается вершина G и ребро EG. | |
| {A,B,C,D,E,F,G} | (B,C) = 8 цикл (D,B) = 9 цикл (D,E) = 15 цикл (F,E) = 8 цикл (F,G) = 11 цикл |
{} | Выбраны все вершины, минимальное остовное дерево построено (выделено зеленым). В этом случае его вес равен 39. |
[править] Реализация
[править] Обозначения
— расстояние от
-й вершины до построенного дерева
— предок
-й вершины, то есть такая вершина
, что
легчайшее из всех рёбер соединяющее i с вершиной из построенного дерева.
— вес ребра 
— приоритетная очередь вершин графа, где ключ — ![d[i]](//upload.wikimedia.org/wikipedia/ru/math/5/e/3/5e3eb41873316c870e257c8c03ab2c96.png)
— множество ребер минимального остовного дерева
[править] Псевдокод
{} Для каждой вершины
![]()
![]()
![]()
![]()
![]()
![]()
Покане пуста Для каждой вершины
смежной с
Если
и
![]()
![]()
![]()
![]()
![]()
[править] Оценка
Асимптотика алгоритма зависит от способа хранения графа и способа хранения вершин, не входящих в дерево. Если приоритетная очередь
реализована как обычный массив
, то
выполняется за
, а стоимость операции
составляет
. Если
представляет собой бинарную пирамиду, то стоимость
снижается до
, а стоимость
возрастает до
. При использовании фибоначчиевых пирамид операция
выполняется за
, а
за
.
| Способ представления графа и приоритетной очереди | Асимптотика |
|---|---|
| Массив d, списки смежности (матрица смежности) | ![]() |
| Бинарная пирамида, списки смежности | ![]() |
| Фибоначчиева пирамида, списки смежности | ![]() |
[править] См. также
[править] Ссылки
- Описание и реализация Алгоритма Прима
- ДИСКРЕТНАЯ МАТЕМАТИКА: АЛГОРИТМЫ : Минимальные остовные деревья
| Это заготовка статьи по информатике. Вы можете помочь проекту, исправив и дополнив её. |



— расстояние от
-й вершины до построенного дерева
— предок
, что
легчайшее из всех рёбер соединяющее i с вершиной из построенного дерева.
— вес ребра 
— множество ребер минимального остовного дерева
{}
Для каждой вершины
Если
и


