
- •2. Алгоритмы построения деревьев
- •2.1. Неориентированные покрывающие деревья
- •2.2.Алгоритм построения максимального ориентированного леса
- •3. Алгоритмы поиска путей
- •3.1. Алгоритм поиска кратчайшего пути
- •3.2. Алгоритмы поиска всех кратчайших путей.
- •3.3. Алгоритмы поиска k кратчайших путей
- •4. Потоковые алгоритмы
- •4.1. Определения
- •4.2. Алгоритм поиска увеличивающей цепи
- •4.4. Алгоритм поиска потока минимальной стоимости
- •4.5. Алгоритм поиска максимального динамического потока
- •5. Паросочетания и покрытия
- •5.1. Понятия и определения
- •5.2. Алгоритм решения задачи о паросочетании максимальной мощности
- •5.3. Алгоритм выбора паросочетания максимального веса
- •6. Задача почтальона
- •6.1. Введение
- •6.4. Задача почтальона для смешанного графа
- •7. Сетевые графики. Метод критического пути
- •Контрольные вопросы
- •I. Организационно-методический раздел
- •4. Перечень контрольных вопросов и заданий для самостоятельной работы
- •4. Примерный перечень вопросов к экзамену и зачёту
- •III. Распределение часов курса по темам и видам работ
6. Задача почтальона
6.1. Введение
Задача почтальона представляет собой задачу поиска кратчайшего маршрута, включающего каждую дугу графа G=(X,A), по крайней мере, один раз и заканчивающегося в начальной вершине движения. Маршрут, в котором каждая дуга обходится ровно один раз, называется эйлеровым маршрутом.
Теорема. Суммарная длина оптимального маршрута почтальона не зависит от того, какая из вершин графа выбрана в качестве начальной.
Доказательство. Предположим, что известен оптимальный маршрут почтальона R на графе G, который начинается и заканчивается в вершине s. Любой оптимальный маршрут когда-то впервые проходит через любую вершину графа, например вершину t. Назовём часть оптимального маршрута R от s до t R1 , а оставшуюся часть обозначим R2. Сформируем новый маршрут R/, состоящий из R2 и следующего за ним R1. R/ начинается и заканчивается в вершине t и имеет ту же суммарную длину, что и R.
.2. Задача почтальона для неориентированного графа
Степенью вершины графа называется количество инцидентных ей дуг. Граф называется чётным, если степени всех его вершин – четные числа, в противном случае граф называется нечётным.
Рассмотрим два случая неориентированного графа: а) граф чётный и б) граф нечётный.
Случай “а”. Если граф чётный, то оптимальное решение задачи почтальона является эйлеровым маршрутом (эйлеровым циклом). Чтобы найти на графе G=(Х,Е) эйлеров маршрут, который начинается и заканчивается в вершине s, необходимо пройти любое ребро (s,x), а затем любое не использованное ещё ребро, инцидентное вершине х, и т.д., пока не вернёмся в вершину s, а вернёмся мы в s обязательно благодаря чётности графа. Таким образом, образовался цикл С1. Если в С1 вошли все рёбра графа G, то С1 является эйлеровым маршрутом. В противном случае следует образовать цикл С2 из неиспользованных в С1 рёбер, начиная с любого из них, затем при необходимости цикл С3, С4 и т.д., пока не будут использованы все рёбра графа. Далее следует соединить все циклы С1, С2,… в один цикл С через общие вершины циклов. С – эйлеров цикл на чётном неориентированном графе.
Пример. Найти эйлеров цикл на графе, изображённом на рис. 6.1.
Рис. 6.1.
Возьмём в качестве начальной вершину а. Обход рёбер осуществим, например, в следующем порядке: (a,g), (g,h), (h,c), (c,k), (k,l), (l,e), (e,f), (f,a). Образовался цикл С1. В С1 не вошли все рёбра графа G, поэтому продолжаем обход ещё не пройденных в рёбер: (l,d), (d,k), (k,h), (h,b), (b,g), (g,f), (f,l). Образовался цикл С2. Все рёбра графа пройдены, и можно соединить циклы С1, С2 в один цикл С через общую вершину, например, через вершину l. С = {(a,g), (g,h), (h,c), (c,k), (k,l), (l,d), (d,k), (k,h), (h,b), (b,g), (g,f), (f,l), (l,e), (e,f), (f,a)} – эйлеров цикл на чётном неориентированном графе с рис 6.1.
Случай
“б”. В
нечётном графе присутствуют вершины
нечётной степени. Если вершина х
имеет нечётную степень, то, по крайней
мере, одно ребро, инцидентное вершине
х,
должно обходиться почтальоном повторно.
Пусть f(i,j)
– число дополнительных прохождений
почтальоном ребра (i,j),
т.е. ребро (i,j)
обходится f(i,j)+1
раз, причём это число неотрицательное
целое. Построим новый граф G*=(Х,Е*),
в котором ребро (i,j)
графа G=(Х,Е)
повторено f(i,j)
раз. Эйлеров маршрут в G*
соответствует оптимальному маршруту
почтальона в G.
Для решения задачи почтальона на нечётном
графе необходимо найти такие значения
переменных f(i,j),
чтобы, во-первых, граф G*
был чётным и, во-вторых, суммарная
стоимость повторных прохождений рёбер
была
минимальна. Если в G
вершина х
с нечётной степенью, то необходимо
повторно обойти нечётное число рёбер,
инцидентных вершине х.
Если вершина х
в G
имеет чётную степень, то необходимо
повторно обойти чётное число рёбер,
инцидентных х
(0
– число чётное). Граф всегда имеет чётное
число вершин с нечётными степенями
(доказать самостоятельно). Цепь повторно
проходимых рёбер, начинающаяся в вершине,
имеющей нечётную степень, обязательно
закончится в другой вершине с нечётной
степенью. Следовательно, необходимо
определить, какие вершины с нечётными
степенями должны быть соединены цепью
повторно проходимых рёбер, и знать
точный состав каждой такой цепи.
Кратчайшие пути между каждой парой
вершин можно определить с помощью
алгоритма Флойда или Данцига. Для
определения пар вершин с нечётными
степенями, которые нужно соединить
цепями повторно проходимых рёбер,
построим граф G/=(Х/,Е/),
где Х/
– множество вершин G
с нечётными степенями, а множество рёбер
Е/
соединяет каждую пару вершин из Х/
(граф G/
– полный). Вес ребра из Е/
полагается равным некоторому достаточно
большому числу за вычетом длины
кратчайшего пути между соответствующими
вершинами графа G.
Далее на G/
строим паросочетание максимального
веса. Так как G/
имеет чётное число вершин, и каждая пара
вершин соединена ребром в G/,
то паросочетание максимального веса
будет покрывать каждую вершину в точности
одним ребром. Это паросочетание связывает
в G
пары вершин с нечётными степенями. То
есть почтальон должен повторно проходить
рёбра, составляющие цепь кратчайшей
длины, соединяющей пару связанных в
паросочетании вершин. Поскольку это
паросочетание максимального веса, то
маршрут почтальона будет иметь минимальную
общую длину. Таким образом, задачу
почтальона для неориентированного
нечётного графа можно решить с помощью
алгоритмов поиска кратчайших путей и
построения паросочетания максимального
веса.
.3. Задача почтальона для ориентированного графа
Полустепенью захода (или внутренней степенью) вершины графа называется количество заходящих в эту вершину дуг. Полустепенью исхода (или внешней степенью) вершины графа называется количество выходящих из этой вершины дуг. Граф называется симметричным, если для всех его вершин полустепень захода равна полустепени исхода, в противном случае граф называется несимметричным.
Рассмотрим два случая ориентированного графа: а) граф симметричный и б) граф несимметричный.
Случай “а”. Для симметричного графа оптимальным решением задачи почтальона является эйлеровым маршрут (эйлеров контур), который может быть найден тем же способом, что и на неориентированном графе, с тем отличием, что движение должно осуществляться с учётом ориентации дуг.
Случай “б”.
Пусть f(i,j)
– число повторных прохождений почтальоном
дуги (i,j),
т.е. дуга (i,j)
обходится f(i,j)+1
раз. Обозначим
полустепень
захода, а
полустепень
исхода вершины i.
Необходимо выбрать такие неотрицательные
целые значения f(i,j),
чтобы минимизировать величину
при
условии
.
Если преобразовать условие следующим образом:
,
то становится очевидным, что это модификация задачи о потоке минимальной стоимости (см. разд. 4.4).
Вершины, для которых D(i)>0, являются источниками с предельными значениями суммарных выходящих потоков, равными D(i). Вершины, для которых D(i)<0, являются стоками с предельными значениями суммарных входящих потоков, равными –D(i). Вершины, для которых D(i)=0, являются промежуточными. Значения пропускных способностей всех дуг не ограничены. Эта задача может быть решена путём введения дополнительного источника и дополнительного стока. Пропускные способности дуг, соединяющих дополнительный источник с источниками и дополнительный сток со стоками, равны указанным для источников и стоков предельным значениям суммарных выходящих и входящих потоков. С помощью алгоритма поиска потока минимальной стоимости определяются значения f(i,j) и строится граф G*, в котором дуга (i,j) повторена f(i,j) раз. Далее, как и в случае “а”, строится эйлеров контур, который соответствует оптимальному маршруту почтальона в G.
Замечание. Задача почтальона не имеет решения для несвязного графа, а также в случае наличия в связном графе ”ловушек”. “Ловушка” – это подграф исходного графа, из множества вершин которого исходят дуги, входящие только в вершины этого же множества.
Пример “ловушки” приведён на рис. 6.2.
Рис. 6.2