Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_2 / Лекция 7. Остовы и деревья.doc
Скачиваний:
69
Добавлен:
19.04.2015
Размер:
2.19 Mб
Скачать

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

Всегда имеется дерево, к которому ребра добавляют до тех пор, пока не получится остовное дерево.

Используя алгоритм Прима, сначала выбираем вершину v0 графа G, а затем выбираем ребро с наименьшим весом e1 = {v0 ,v1}, инцидентное к вершине v0 и формируем дерево Т1.

Следующим выбираем ребро с наименьшим весом е2 такое, что одна вершина ребра принадлежит дереву T1, а вторая — нет, и добавляем его в дерево, после чего получаем дерево T2 с двумя ребрами.

Сформировав дерево Тk формируем дерево Тk+1, выбирая ребро с минимальным весом ek+1 такое, что одна его вершина принадлежит дереву Тk, а другая — нет, и добавляем это ребро в дерево.

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

1) Выбрать вершину v0 графа G и ребро с наименьшим весом e1, для которого v0 – одна из вершин, и сформировать дерево T1.

2) Для заданного дерева Tk с ребрами e1, e2, e3, …, ek, если имеется вершина, не принадлежащая Tk, выбрать ребро с наименьшим весом, смежное с ребром дерева Tk и имеющее вершину вне дерева Tk. Добавить в дерево Tk, формируя дерево Tk+1.

3) Продолжить, пока имеются вершины графа G, не принадлежащие дереву.

Построение минимального остовного дерева можно проводить двумя способами:

1) остов графа строится непосредственно на самом графе, выделяя ребра утолщенной линией, которые входят в остовное дерево;

2) строится отдельно корневое дерево, которое будет минимальным остовным деревом. Второй случай используется, если требуется определить высоту построенного дерева.

ПРИМЕР. Рассмотрим граф.

Начав с вершины а, первым выбираем ребро {а, е}, поскольку оно имеет минимальный вес.

Т. о. дерево T1 состоит из ребра {а, е}.

Теперь выбираем ребро {e,d}, так как это ребро с минимальным весом из тех, что имеют только одну вершину в дереве T1.

Получаем дерево Т2.

Далее выбираем ребро {d, b}, поскольку это ребро с минимальным весом из тех, что имеют только одну вершину в Т2. Получаем Т3.

Теперь, так как имеется два ребра с одинаковым весом и одной вершиной в Т3, имеем выбор.

Предположим, выбрано ребро {d,c}, поэтому дерево Т4 имеет следующий вид.

Следующим выбираем ребро {е, f}. Это ребро имеет минимальный вес из тех, что имеют только одну вершину в дереве Т4; отсюда Т5

Наконец, выбираем ребро {f,g}. Поскольку это ребро минимального веса из тех, что имеют одну вершину в Т4, а вершина g — последняя из оставшихся вершин, имеем дерево Т6, которое является искомым остовным деревом.

ВЕС МОД 2+2+1+4=9

Пример. Для данного взвешенного графа найти минимальное корневое остовное дерево, используя алгоритм Прима. Определить высоту построенного дерева.

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

Выбираем вершину , которая будет корнем дерева. Из трех ребер, инцидентных вершине , выбираем те, что имеют наименьший вес.

Два ребра (до вершин и ) с весом, равным 7, инцидентны вершине . Присоединяем их.

К вершине присоединяем ребро с весом 5 до вершины . К вершине присоединяем ребро с весом 4 до вершины . К вершине присоединяем ребро с весом 6 до вершины .

Получаем следующее минимальное корневое дерево с весом, равным min(T)=7+7+6+5+4=29. Высота дерева = 3.