- •По мдк.02.01”Технология монтажа и обслуживание компьютерных сетей” пм.02 Техническая эксплуатация сетей электросвязи
- •Путь минимальной суммарной длины во взвешенном графе с произвольными весами для всех пар вершин…………………………17
- •Теоретические основы поиска кратчайших путей
- •Сведения о графах
- •Внутреннее представление графов
- •1.3.Основные понятия.
- •1.4. Алгоритм Флойда
- •1.5. Путь минимальной суммарной длины во взвешенном графе с произвольными весами для всех пар вершин
- •2. Поиск кратчайших путей. Алгоритм Флойда
- •2.1. Задача Флойда
- •2.2. Описание программы
- •2.3. Листинг программы
1.3.Основные понятия.
Граф без циклов называется ациклическим или лесом.
Связный ациклический граф называется деревом.
Если G-лес, то каждая его компонента является деревом.
Остов графа – это дерево, являющееся остовным подграфом.
Остовной подграф – это подграф, множество вершин которого совпадает с множеством вершин графа.
Любой связный граф имеет остов. Обратно, если граф имеет остов, то он – связный.
Если граф имеет циклы, то, последовательно удаляя ребра из циклов до получения ациклического подграфа, получим остов. Причем, удаление ребра из цикла графа не нарушает его связности, т.к. такие ребра не являются мостами.
Ребро x и вершина v называются покрывающими друг друга, если они инцидентны. Множество вершин, покрывающих все ребра, называется вершинным покрытием графа. Множество ребер, покрывающих все вершины, называется реберным покрытием графа. Представляет интерес наименьшие по числу вершин и ребер покрытия. Если ребрам графа приписаны веса, то можно ставить вопрос о реберном покрытии, имеющем наименьший суммарный вес.
Постановка задачи.
Пусть G=(V,X)-связный взвешенный граф. Обозначим cij=c(vi,vj) вес ребра {vi,vj}. Требуется найти остов, имеющий наименьшую сумму весов ребер. Пример.
Алгоритм решения.
Включить в остов одну произвольную вершину w. Пример.
Рассмотреть все вершины vj, еще не принадлежащие остову. Если вершина vj не смежна вершине w, принадлежащей остову, то она получает метку [0;М], где М- бесконечно большое число. Если вершина vj имеет смежную вершину w,которая принадлежит остову, то вершина получает метку [a ;b ], где a=номер вершины w; b = c(w,vj); Пример.
Из всех вершин, не принадлежащих еще остову, выбираем вершину V* с минимальным значением b и включаем ее в остов вместе с ребром (v,V*), где v- вершина, номер которой совпадает со значением метки a вершины V*.Пример.
Если число вершин, принадлежащих остову, равно числу вершин графа, то кратчайший остов найден, задача решена. Пример. Иначе – перход к шагу 5. Пример.
Корректируем метки вершин vj, которые еще не принадлежат остову и смежны вершине V*:
если b j > c(V*,vj),
то b j = c(V*,vj)
a j = V*,
если b j <= c(V*,vj), то метка вершины не изменяется.
После окончания помечивания – переход к пункту 3. Пример.
Пример.
Задание.
Пункт 1.
Пункт 2
Пункт 3.
Пункт 4
.
Пункт 5.
Результат.
1.4. Алгоритм Флойда
Присвоить
cij=0
для всех i=1,2,...,n и cij=
,
если в графе отсутствует дуга (xi
xj).
Присвоение начальных значений.
Шаг 1. присвоить k=0;
Шаг 2. k=k+1.
Шаг 3. Для всех i<>k, таких, что cik<> , и для всех j<>k, таких, что cik<> , сij= [min[cij, (cik+ ckj)]. (9)
Проверка на окончание.
Шаг 4. Если k=n, то матрица [сij] дает длины всех кратчайших путей.
Остановка. Иначе перейти к шагу 2.
На
практике часто требуется найти не только
кратчайший путь, но также второй, третий
и т. д. кратчайшие пути в графе. Располагая
этими результатами, можно решить, какой
путь выбрать в качестве наилучшего. Для
решения этой задачи нужно воспользоваться
методом Йена (1971г.). Для которого: t-k-й
кратчайший путь от s к t, где
-соответственно
2-я, 3-я,…, qk-я вершины k-го кратчайшего
пути. Pik-
"отклонение от пути Pk-1
в точке i" т. е. Pik
-кратчайший из путей, совпадающих с
Pik-1
от
s до i-й вершины, а затем идущий к вершине,
отличной от (i+1)-х вершин тех (ранее уже
построенных) кратчайших путей Pi
(j=1,2,…,k-1), которые имеют те же самые
начальные подпути от s к i-й вершине, не
проходящему ни через одну из вершин s,
x2k-1,
x3k-1,...,
xik-1участвующих
в формировании первой части пути Pik.
Отсюда следует, что путь Pik
будет являться простой цепью (путь, в
котором каждая вершина используется
не более одного раза.).
Первый подпуть s, x2k, x3k,..., xik (совпадающий с s, x2k-1, x3k-1,..., xik-1) пути Pik называется его корнем и обозначается Rik, а второй подпуть xik,...,t пути Pik называется ответвлением и обозначается через Sik.
Алгоритм начинает работу с нахождения P1 с помощью алгоритма Дейкстры. Этот путь помещается в список L0 (который должен содержать k-е кратчайшие пути). В общем случае для нахождения Pk нужно уже иметь кратчайшие пути P1,P2, Pk-1.
