Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тезисы по философии-2.1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.11 Mб
Скачать

6. Задача почтальона

6.1. Введение

Задача почтальона представляет собой задачу поиска кратчайшего маршрута, включающего каждую дугу графа G=(X,A), по крайней мере, один раз и заканчивающегося в начальной вершине движения. Маршрут, в котором каждая дуга обходится ровно один раз, называется эйлеровым маршрутом.

Теорема. Суммарная длина оптимального маршрута почтальона не зависит от того, какая из вершин графа выбрана в качестве начальной.

Доказательство. Предположим, что известен оптимальный маршрут почтальона R на графе G, который начинается и заканчивается в вершине s. Любой оптимальный маршрут когда-то впервые проходит через любую вершину графа, например вершину t. Назовём часть оптимального маршрута R от s до t  R1 , а оставшуюся часть обозначим  R2. Сформируем новый маршрут R/, состоящий из R2 и следующего за ним R1R/ начинается и заканчивается в вершине 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