
- •Реферат
- •Содержание
- •Введение
- •1 Графы
- •1.1Основные характеристики графов
- •1.2 Пути и маршруты
- •1.3 Каркас неориентированного графа
- •1.4 Задача об оптимальном каркасе
- •2. Алгоритм Прима
- •2.1 Краткое описание алгоритма
- •2.2Разработка псевдокода
- •2.3 Визуализация алгоритма
- •3. Анализ трудоемкости
- •4.Тестирование программ реализации алгоритмов
- •4.1 Тестирование правильности
- •4.2 Анализ по времени
- •Заключение
- •Список используемых источников.
- •Приложение а.
- •Текст основной программы.
2. Алгоритм Прима
2.1 Краткое описание алгоритма
Алгоритм Прима (ближайшего соседа) отличается от алгоритма Краскала тем, что на каждом этапе не требует ни сортировки, ни проверки на цикличность.
Алгоритм Прима:
Построение остовного дерева T начинается с произвольной вершины
.
Среди ребер, инцидентных вершине
, выбирается ребро
наименьшего веса и включается в деревоT.
Повторяя процесс, выполняется поиск наименьшего по весу ребра, соединяющего вершины
иu с некоторой другой вершиной графа.
Процесс включения ребер продолжается до тех пор, пока все вершины исходного графа 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 – Минимально остовное дерево исходного графа.