- •Министерство образования и науки российской федерации
- •1.1. Основные операции над многомерными матрицами
- •1.1.5. Кронекеровское произведение многомерных матриц
- •1.1.6. Обращение многомерной матрицы
- •Лабораторная работа № 2
- •Лабораторная работа № 3 Кратчайший остов графа Теоретическая часть
- •3.1. Понятие дерева
- •3.2. Алгоритм построения всех остовных деревьев графа на основе полного перебора последовательностей ребер или дуг
- •3.3. Определение кратчайшего остова неориентированного графа на основе упорядочения ребер графа (алгоритм Краскала)
- •3.4. Построение кратчайшего остовного дерева с помощью алгоритма Прима в табличной форме
Лабораторная работа № 3 Кратчайший остов графа Теоретическая часть
3.1. Понятие дерева
Одним из наиболее важных понятий теории графов является дерево. Его упрощенное определение можно дать так. Дерево – граф, имеющий начало, от которого дуги (ребра) расходятся, как ветви дерева. Дерево, как и граф, может быть ориентированным и неориентированным.
Неориентированное дерево – это сильно связный граф, не имеющий циклов. Ориентированное дерево представляет собой ориентированный граф без циклов, в котором в каждую вершину должна быть направлена только одна дуга, кроме корневой вершины, куда не заходит ни одна дуга. Остовное дерево графа, или остов графа, имеет то же самое множество вершин, что и исходный граф, но множество дуг (ребер) остовного дерева является подмножеством множества дуг (ребер) исходного графа.
3.2. Алгоритм построения всех остовных деревьев графа на основе полного перебора последовательностей ребер или дуг
Алгоритм можно представить в виде последовательности из 7 пунктов (этапов). Он справедлив как для неориентированных, так и для ориентированных графов.
1. Все ребра (дуги) перенумеровываются от 1 до m, где m – число ребер (дуг) в графе.
2. Составляются различные перестановки последовательностей ребер (дуг), например для трех ребер в графе последовательности
1 – d1, d2, d3; 2 – d1, d3, d2; 3 – d2, d1 d3;
4 – d2, d3, d1; 5 – d3, d1, d2; 6 – d3, d2, d1.
3. Выбрав определенную последовательность, строим дерево (для неориентированного графа – сильно связный граф без циклов, для ориентированного графа не должно быть двух путей в одну вершину). Если очередное ребро (дуга) увеличивает дерево, т.е. увеличивает число ребер (дуг) в нем, то оно включается в дерево. Если же оно приводит к образованию цикла (в случае неориентированного графа) или образует два пути в одну вершину (для ориентированного графа), то данное ребро (дуга) вычеркивается из списка данной последовательности. Если ребро(дуга) не увеличивает дерево, то оно вносится в список «Пропущенное ребро (дуга)».
4. После каждого включения ребра (дуги) в дерево просматривается список «Пропущенное ребро». После использования в дереве пропущенного ребра (дуги) оно вычеркивается из списка «Пропущенное ребро». Ребро (дуга) вычеркивается из списка «Пропущенное ребро» также и в том случае, если пропущенное ребро (дуга) приводит к образованию цикла (для неориентированного графа) или к двум путям в вершину (для ориентированного графа).
5. Пункты 3,4 повторяются до тех пор, пока не будут просмотрены все ребра (дуги) данной последовательности. Для ориентированного графа необходимо убедиться, что полученное дерево есть остовное дерево графа, т.е. из вершины-корня достижимы все вершины графа.
6. Полученное остовное дерево сравнить с имеющимися и, если нет повторения, занести в память (список деревьев).
3.3. Определение кратчайшего остова неориентированного графа на основе упорядочения ребер графа (алгоритм Краскала)
Такая задача возникает при прокладке дорог, газопроводов, линий электропередач, линий связи и т.д., когда необходимо связать n точек так, чтобы общая длина «линий связи» была минимальной. Следует отметить, что «кратчайший остов графа» не имеет никакого отношения к дереву, дающему все кратчайшие пути, выходящие из некоторой выбранной вершины. Так, для графа (рис. 3.1), где числа, стоящие около ребер, являются их весами, дерево, дающее все кратчайшие пути, выходящие из вершины х1, изображено на рис.3.2, а кратчайший остов графа представлен на рис. 3.3.
x1

Рис. 3.1. Исходный граф с проставленными весами ребер
ч1

Рис. 3.2. Кратчайшие пути из вершины X1

Рис. 3.3. Кратчайший остов графа
Итак, кратчайший остов графа связывает кратчайшим образом все вершины графа, а не только х1 с другими вершинами.
Для построения кратчайшего остова с помощью алгоритма, изложенного в п. 3.3, необходимо в п.3.2(2) сформировать последовательность ребер в порядке возрастания их весов.


