
Лабораторная работа №2.
Тема: Графы
Цель работы: ознакомиться с алгоритмами нахождения минимального остового дерева нагруженного графа, поиска маршрута с минимальным числом ребер в ориентированном графе, нахождения минимального пути в нагруженном графе.
Теоретические сведения
Остовное дерево связного графа
Остовным деревом связного графа G называется любая его часть, содержащая все вершины графа G и являющаяся деревом.
Минимальные остовные деревья нагруженных графов
Граф G(V.E)
называется нагруженным,
если на множестве его ребер определена
весовая функция l:Е→R,
т.е. каждому ребру е
Е
связного графа G=(V,E)
с непустым множеством ребер Е поставлена
в соответствие величина l(е)
— длина
ребра е. Приведем алгоритм, позволяющий
найти остовное дерево графа G
с минимальной суммой длин содержащихся
в нем ребер (по сравнению со всеми другими
остовными деревьями графа G).
Остовное дерево связного нагруженного
графа G
с минимальной суммой длин содержащихся
в нем ребер будем называть минимальным
остовным деревом (МОД) графа G.
Алгоритм выделения МОД нагруженного связного графа G:
Шаг 1. Выберем в графе G ребро минимальной длины. Вместе с инцидентными ему вершинами оно образует часть графа G2 графа G. Положим i=2.
Шаг 2. Если i=n, где n=n(G), то задача решена, и G, - искомое МОД графа G. В противном случае переходим к шагу 3.
Шаг 3. Строим граф Gi+1, добавляя к графу G, новое ребро минимальной длины, выбранное среди всех ребер графа G, каждое из которых инцидентно какой-нибудь вершине графа G, и одновременно инцидентно какой-нибудь вершине графа G, не содержащейся Gi. Вместе с этим ребром включаем в Gi+1 и инцидентную ему вершину, не содержащуюся в Gi. Присваиваем i:=i+l и переходим к шагу 2.
Пример.
Поиск путей (маршрутов) с минимальным числом дуг (ребер)
Пусть в орграфе D из вершины v в вершину w, где v≠w, называется минимальным, если он имеет минимальную длину среди всех путей орграфа D из v в w.
Назовем образом вершины х в орграфе D множество концов дуг, началом которых является вершина х, и обозначим его D(x). Множество начал дуг, концом которых является х, назовем прообразом х и обозначим его D-1(x)
Пусть D=(V,X) — орграф с n вершинами (n≥2) и v,w — заданные вершины из V, где v≠w. Опишем алгоритм поиска минимального пути из v в w в орграфе D (алгоритм фронта волн).
Алгоритм:
Шаг 1. Помечаем вершину v индексом 0. Затем помечаем вершины, принадлежащие образу вершины v, индексом 1. Множество вершин с индексом 1 обозначаем FW1(v). Полагаем k=l.
Шаг 2.
Если FWk(v)=0
или выполняется k=n-l
и w
FWk(v),
то вершина w
не достижима из v,
и работа алгоритма на этом заканчивается.
В противном случае переходим к шагу 3.
Шаг 3. Если w FWk(v), то переходим к шагу 4. В противном случае существует путь из v в w длины k, и этот путь является минимальным. Последовательность вершин:
и есть искомый минимальный путь из v в w. На этом работа алгоритма заканчивается.
Шаг 4. Помечаем индексом k+1 все непомеченные вершины, которые принадлежат образу множества вершин с индексом k. Множество вершин с индексом k+1 обозначаем FWk+1(v). Присваиваем k=k+l и переходим к шагу 2.
Множество FWk(v) в данном алгоритме обычно называют фронтом волны k- го уровня.
Вершины wb. ., wk_i из (9.10), вообще говоря могут быть выделены неоднозначно. Эта неоднозначность соответствует случаям, когда существует несколько различных минимальных путей из v в w в орграфе D.
Пример. Определим минимальный путь v1 в v6 в орграфе D, заданном матрицей смежности, представленной в таблице.
Таблица
|
V1 |
V2 |
V3 |
V4 |
V5 |
V6 |
V1 |
0 |
0 |
0 |
1 |
1 |
0 |
V2 |
1 |
0 |
0 |
1 |
I |
1 |
V3 |
1 |
1 |
0 |
1 |
1 |
1 |
V4 |
0 |
1 |
1 |
0 |
1 |
0 |
V5 |
1 |
I |
1 |
1 |
0 |
0 |
V6 |
1 |
1 |
1 |
1 |
1 |
0 |
Действуя согласно алгоритму, последовательно определяем FW1(v1)={v4, v5}, FW2(v1)={v2, v3}, FW3(v1)= {v6}. Таким образом, v6 FW3(v1), а значит (см. шаг 3), существует путь из v1 в v6 длины 3, и этот путь является минимальным. Найдем теперь минимальный путь из v1 в v6. Определим множество:
FW2(v1)
D-1(v6)={v2,
v3}
{v2,
v3}={v2,
v3}.
Выберем любую вершину из найденного множества, например вершину v3. Определим далее множество:
FW1(v1) D-1(v3)={v4, v5} {v4, v5, v6}={v4, v5}.
Выберем любую вершину из найденного множества, например вершину v5. Тогда v1v5v3v6 — искомый минимальный путь из v1 в v6 (длины 3) в oprpaфе D.