Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

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

Лекция



Привет, сегодня поговорим про алгоритм прима, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое алгоритм прима , настоятельно рекомендую прочитать все из категории Алгоритмы и теория алгоритмов.

алгоритм прима — алгоритм построения минимального остовного дерева взвешенного связного неориентированного графа. Алгоритм впервые был открыт в 1930 году чешским математиком Войцехом Ярником, позже переоткрыт Робертом Примом в 1957 году, и, независимо от них, Э. Дейкстрой в 1959 году.

Алгоритм Прима обладает тем свойством, что ребра в множестве А всегда образуют единое дерево. Дерево начинается с произвольной корневой вершины г и растет до тех пор, пока не охватит все вершины в V. На каждом шаге к дереву А добавляется легкое ребро, соединяющее дерево и отдельную вершину из оставшейся части графа. Данное правило добавляет только безопасные для А ребра; следовательно, по завершении алгоритма ребра в А образуют минимальное остовное дерево. Данная стратегия является жадной, поскольку на каждом шаге к дереву добавляется ребро, которое вносит минимально возможный вклад в общий вес.

В качестве входных данных алгоритму Прима передаются связный граф G и корень r минимального остовного дерева. Все вершины G, еще не попавшие в дерево,хранятся в очереди с приоритетом Q. Приоритет вершины v определяется значением key[v], которое равно минимальному весу ребер, соединяющих v с вершинами минимального остова. Поле prev[v] для вершин дерева указывает на родителя, а для вершин из очереди, указывает на вершину дерева, в которою ведет ребро с весом key[v] (одно из таких ребер, если их несколько).

Формальное описание алгоритма Прима

MST_PRIM(G, w, r)
1    for (Для) каждой вершины u є V[G]
2            do key [u] «- INFINITY
3               prev[u] «- NIL
4    key[r] «- 0
5    Q «- V[G]
6    while Q не пустая
7            do u «- Extract_Min(Q)
8                  for (Для) каждой вершины v є Adj[u]
9                         do if v є Q и w(u,v) < key[v]
10                           then prev[v] «- u
11                                key[v] «- w(u, v)

В строках 1-5 ключи всех вершин устанавливаются равными INFINITY (за исключением корня r, ключ которого равен 0, так что он оказывается первой обрабатываемой вершиной), указателям на родителей для всех узлов присваиваются значения NIL и все вершины вносятся в очередь с приоритетами Q. Об этом говорит сайт https://intellect.icu . Алгоритм поддерживает следующий инвариант цикла, состоящий из трех частей.

Перед каждой итерацией цикла while в строках 6-11

1. A={(v,prev[v]):v є V - {r} - Q};
2. вершины, уже помещенные в минимальное остовное дерево, принадлежат множеству V — Q;
3. для всех вершин v є Q справедливо следующее: если prev[v] != NIL, то key [v] < INFINITY и key [v] — вес легкого ребра (v,p[v]), соединяющего v с некоторой вершиной, уже находящейся в минимальном остовном дереве.

В строке 7 определяется вершина и, принадлежащая легкому ребру, пересекающему разрез (V — Q,Q) (за исключением первой итерации, когда и = r в соответствии с присвоением в строке 4). Удаление и из множества Q добавляет его в множество V — Q вершин дерева. Цикл for в строках 8-11 обновляет поля key и prev для каждой вершины v, смежной с u и не находящейся в дереве. Это обновление сохраняет третью часть инварианта.

Оценка сложности

Время работы алгоритма Прима зависит от выбранной реализации очереди с приоритетами Q. Если реализовать ее как бинарную пирамиду, то для выполнения инициализации в строках 1-5 потребуется времени О (V). Тело цикла while выполняется |V| раз, а поскольку каждая операция Extract_Min занимает время О (lg V), общее время всех вызовов процедур Extract__Min составляет О (V*lg V). Цикл for в строках 8-11 выполняется всего О (Е) раз, поскольку сумма длин всех списков смежности равна 2|Е|. Внутри цикла for проверка на принадлежность Q в строке 9 может быть реализована за постоянное время, если воспользоваться для каждой вершины битом, указывающим, находится ли она в Q, и обновлять этот бит при удалении вершины из Q. Присвоение в строке 11 неявно включает операцию Decrease_Key над пирамидой. Время выполнения этой операции — О (lg V). Таким образом, общее время работы алгоритма Прима составляет o(V * lg V + Е * lg V) = o(Е * lg V), что асимптотически совпадает со временем работы алгоритма Крускала.

Пример

Выполнение алгоритма Прима:

1. Начальная фаза. Минимальный покрывающий лес состоит из корня и пустого множества ребер.
Алгоритм Прима

2. Ребро с весом 6 является минимальным ребро, соединяющим корень с остальными вершинами. Добавляем его к минимальному остову.
Алгоритм Прима

3. Следующее безопасное ребро с весом 11. Добавляем его.
Алгоритм Прима

4-8. Добавляем остальные безопасные ребра.
Алгоритм Прима Алгоритм Прима Алгоритм ПримаАлгоритм Прима Алгоритм Прима

Ребра с весом 17, 19 и 25 – не безопасные. Их концы лежат в одной компоненте связности. Ребро с весом 21 – безопасное, поэтому добавляем его. Минимальное остовное дерево построено.

Оценка сложности

Асимптотика алгоритма зависит от способа хранения графа и способа хранения вершин, не входящих в дерево. Если приоритетная очередь Алгоритм Прима реализована как обычный массив Алгоритм Прима, то Алгоритм Прима выполняется за Алгоритм Прима, а стоимость операции Алгоритм Прима составляет Алгоритм Прима. Если Алгоритм Прима представляет собой бинарную пирамиду, то стоимость Алгоритм Прима снижается до Алгоритм Прима, а стоимость Алгоритм Прима возрастает до Алгоритм Прима. При использовании фибоначчиевых пирамидоперация Алгоритм Прима выполняется за Алгоритм Прима, а Алгоритм Прима за Алгоритм Прима.

Способ представления приоритетной очереди и графа Асимптотика
Массив d, списки смежности (матрица смежности) Алгоритм Прима
Бинарная пирамида, списки смежности Алгоритм Прима
Фибоначчиева пирамида, списки смежности Алгоритм Прима

Вау!! 😲 Ты еще не читал? Это зря!

На этом все! Теперь вы знаете все про алгоритм прима, Помните, что это теперь будет проще использовать на практике. Надеюсь, что теперь ты понял что такое алгоритм прима и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Алгоритмы и теория алгоритмов

Из статьи мы узнали кратко, но содержательно про алгоритм прима
создано: 2014-10-13
обновлено: 2021-03-22
132715



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Алгоритмы и теория алгоритмов

Термины: Алгоритмы и теория алгоритмов