При построении каркаса берут ребро графа и добавляют другие ребра не создающие циклов до тех пор, пока нельзя будет добавить ни одного ребра из-за появляющегося цикла.
Граф может содержать несколько каркасов.
![]() |
![]()
![]()
и
-каркасы
графа ![]()
Оптимизация на графах
Существует большое число задач, связанных с решением
оптимизационных задач на графах. Например: поиск кратчайшего или длиннейшего
пути на карте между пунктами; нахождение сетей минимальной стоимости и т. д.
При решении подобных задач используют взвешенные графы
,
каждой вершине (ребру) которого приписывается некоторое число. Будем
рассматривать графы, в которых число задается на ребрах графа.
Число
приписанное
к некоторой дуге или ребру будем называть мерой дуги или ребра
. В зависимости от конкретной задачи мера
может иметь различный смысл: расстояние, стоимость и.т.д.
Мерой пути в графе будем называть сумму мер дуг, составляющих данный путь:

1. Построение минимального каркаса.
Пусть задан неориентированный граф с нагруженными ребрами.
Требуется выбрать ребра графа
таким
образом, чтобы полученный подграф был каркасом графа с минимальной суммой мер
ребер.
Простейшим алгоритмом решения служит алгоритм Краскала. При его выполнении составляется список ребер в порядке увеличения мер ребер. Дальнейшие шаги заключаются в выборе ребер начиная с ребра с минимальной мерой. Если очередное ребро приводит к образованию цикла, то его отбрасывают. Когда выбранное число ребер на единицу меньше числа вершин процесс прекращают.
Пример: требуется построить линию электропередач минимальной стоимости между населенными пунктами a,b,c,d,e,f. Стоимость линий между различными пунктами известна.
a
f b
e c
d
Стоимость строительства линий приведена в таблице:
|
a |
b |
c |
d |
e |
f |
|
|
a |
- |
2 |
4 |
7 |
8 |
3 |
|
b |
- |
5 |
1 |
3 |
6 |
|
|
c |
- |
9 |
4 |
7 |
||
|
d |
- |
2 |
5 |
|||
|
e |
- |
3 |
||||
|
f |
- |
Составляем таблицу в порядке увеличения веса ребер:
|
Вес ребра |
Ребра |
|
1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
Поскольку у графа 6 вершин, то для построения
каркаса нам нужно выбрать 5 ребер. Устанавливаем значение счетчика ![]()
Выбираем
- стоимость 1,
;
Выбираем
-
стоимость 2,
;
Выбираем
- стоимость 2,
;
Выбираем
-
стоимость 3,
;
Выбираем
-
стоимость 3, однако это ребро создает цикл и его следует отбросить,
;
Выбираем
-
стоимость 3, опять возникает цикл, поэтому и это ребро исключаем,
;
Выбираем
-
стоимость 4,
. Число выбранных ребер дерева на
единицу меньше числа вершин графа, поэтому процесс завершен. Общая стоимость
12.
a
3 2
f b
4
1
e c
2
d
Замечание: изученный алгоритм может применяться для нахождения максимального каркаса. Для этого на каждом шаге следует выбирать ребро с максимальной мерой.
2. Нахождение минимального пути в ориентированном графе.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.