Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовой проект алгоритм прима.docx
Скачиваний:
143
Добавлен:
07.06.2018
Размер:
255 Кб
Скачать
☆

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

2.1 Краткое описание алгоритма

Алгоритм Прима (ближайшего соседа) отличается от алгоритма Краскала тем, что на каждом этапе не требует ни сортировки, ни проверки на цикличность.

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

  1. Построение остовного дерева T начинается с произвольной вершины .

  2. Среди ребер, инцидентных вершине , выбирается ребронаименьшего веса и включается в деревоT.

  3. Повторяя процесс, выполняется поиск наименьшего по весу ребра, соединяющего вершины иu с некоторой другой вершиной графа.

  4. Процесс включения ребер продолжается до тех пор, пока все вершины исходного графа G не будут включены в дерево T. Построенное дерево будет минимальным остовным деревом.

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

Неформальное описание алгоритма:

  • Выбрать корневую вершину V;

  • Пометить V как посещенную;

  • Для каждой смежной с V вершины установить затраты кратчайшего ребра;

  • Выбрать не посещённую вершину с наименьшим весом ребра в качестве текущей вершины;

  • V и добавить связывающее ребро в остовное дерево;

  • Повторить все шаги со второго, пока не будут посещены все вершины.

На рисунке 1 представлена блок-схема алгоритма Прима.

Рисунок 1 – Блок – схема алгоритма Прима

2.2Разработка псевдокода

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

На рисунке 2 представлен псевдокод алгоритма Прима. На входе матрица смежности cost[i][j] размеромn/n.

Рисунок 2 – Псевдокод реализации алгоритма Прима через матрицу смежностей

На выходе мы имеем минимальное остовное дерево Nи суммарный вес каркасаmincost.

Алгоритм Крускала. На рисунке 3 представлен псевдокод алгоритма Крускала. На входе матрица смежности cost[i][j] размеромn/n.

Рисунок 3 – Псевдокод реализации алгоритма Крускала через матрицу смежностей

На выходе мы имеем минимальное остовное дерево.

2.3 Визуализация алгоритма

Проиллюстрируем алгоритм Прима графе. На рисунке 1 представлен исходный звешенный связный неориентированный граф. Выберем вершину A в качестве начальной. Среди ребер, инцидентных вершине A, выбираем ребро A,D наименьшего веса и включаем его в остовное дерево T. Вершина D инцидентна ребрам (D,B), (D,E), (D,F). В остов включаем ребро (D,F). Ребро (A,B), имеет меньший вес чем ребро (F,E), с силу данного обстоятельства, нам необходимо вернуться в вершину A и включить в дерево ребро (A,B).Далее проходим по незадействованным вершинам и включаем в остов ребра (B,E), (E,C), (E,G). В результате мы получаем минимальное остовное дерево – рисунок 5.

Рисунок 4 – Исходный  взвешенный связный неориентированный граф.

Рисунок 5 – Минимально остовное дерево исходного графа.