Алгоритмы построения эйлерова цикла




Выше был установлен эффективный способ проверки наличия эйлерова цикла в графе. А именно, для этого необходимо и достаточно убедиться, что степени всех вершин четные, что нетрудно сделать при любом представлении графа. Осталось заметить, что предложенный в доказательстве алгоритм линеен, т.е. число действий прямо пропорционально числу ребер.

Алгоритм построения эйлерова цикла в эйлеровом графе.

Вход: эйлеров граф G(V,E), заданный матрицей смежности. Для простоты укажем, что Г[v]— множество вершин, смежных с вершиной v.

Выход: последовательность вершин эйлерова цикла.

 

S:=Ø {стек для хранения вершин}

select v V {произвольная вершина}

v→S {положить v в стек S}

while S≠Ø do

v←S; v→S {v — верхний элемент стека}

if Г[v]=Ø then

v←S;

yield v

else

select u Г[v] {взять первую вершину из списка смежности}

u→S {положить u в стек}

Г[v]:=Г[v]\{u}; Г[u]:=Г[u]\{v} {удалить ребро (v,u)}

end if

end while

 

Обоснование алгоритма.

Принцип действия этого алгоритма заключается в следующем. Начиная с произвольной вершины, строим путь, удаляя ребра и запоминая вершины в стеке, до тех пор пока множество смежности очередной вершины не окажется пустым, что означает, что путь удлинить нельзя. Заметим, что при этом мы с необходимостью придем в ту вершину, с которой начали. В противном случае это означало бы, что вершина v имеет нечетную степень, что невозможно по условию. Таким образом, из графа были удалены ребра цикла, а вершины цикла были сохранены в стеке S. Заметим, что при этом степени всех вершин остались четными. Далее вершина v выводится в качестве первой вершины эйлерова цикла, а процесс продолжается, начиная с вершины, стоящей на вершине стека.

Мне бы хотелось привести здесь еще один алгоритм построения эйлерова цикла в эйлеровом графе — это Алгоритм Флёри, он позволяет пронумеровать ребра исходного графа так, чтобы номер ребра указывал каким по счету это ребро войдет эйлеров цикл.

Алгоритм Флёри:

1. Начиная с любой вершины v присваиваем ребру vu номер 1. Вычеркиваем это ребро из списка ребер и переходим к вершине u.

2. Пусть w - вершина, в которую мы пришли в результате выполнения 1 шага алгоритма и k - номер, присвоенный очередному ребру на этом шаге. Выбираем произвольное ребро инцидентное вершине w, причем мост выбираем только в крайнем случае, если других возможностей выбора ребра не существует. Присваиваем ребру номер k+1 и вычеркиваем его. Процесс длится до тех пор, пока все ребра не вычеркнут.

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

 
 

Пример:

Приведем теперь строгое обоснование корректности алгоритма Флёри построения эйлерового цикла в данном эйлеровом графе.

Теорема 2. Пусть G(V,E) — эйлеров граф. Тогда следующая процедура всегда возможна и приводит к построению эйлерова цикла графа G(V,E).

Выходя из произвольной вершины, идем по ребрам графа произвольным образом, соблюдая при этом следующие правила:

1) Стираем ребра по мере их прохождения (вместе с изолированными вершинами, которые при этом образуются);

2) На каждом шаге идем по мосту только в том случае, когда нет других возможностей.

Доказательство.

Убедимся сначала, что указанная процедура может быть выполнена на каждом этапе. Пусть мы достигли некоторой вершины v, начав с вершины u, v ≠ u. Удалив ребра пути из v в u, видим, что оставшийся граф G1 связен и содержит ровно две нечетных вершины v и u. Согласно следствию #2 из теоремы 1 граф G1 имеет эйлеров путь P из v в u. Поскольку удаление первого ребра инцидентного u пути P либо не нарушает связности G1, либо происходит удаление вершины u и оставшийся граф G2 связен с двумя нечетными вершинами, то отсюда получаем, что описанное выше построение всегда возможно на каждом шаге. (Если v = u, то доказательство не меняется, если имеются ребра, инцидентные u). Покажем, что данная процедура приводит к эйлерову пути. Действительно, в G не может быть ребер, оставшихся не пройденными после использования последнего ребра, инцидентного u, поскольку в противном случае удаление ребра, смежного одному из оставшихся, привело бы к несвязному графу, что противоречит условию


Алгоритм Фаулкса

 

Рассмотрим шесть операций: A, B, C, D, E, F, между которыми существуют следующие соотношения:

А<B B/<C C<D E<D F<D

A<D B<D F<E

A><F B><E

B><F

Цель задачи состоит в том, чтобы найти (если это возможно) пути, проходящие один и только один раз через каждую из точек и удовлетворяющие написанным соотношениям: это гамильтоновы пути.

 

  A B C D E F
A            
B            
C            
D            
E            
F            

 

 

B

A C

 

F D

E

Рис. 16.4

 

Исследование графа, изображенного на рис. 16.4, показывает, что точка D есть безусловно конечная точка каждого гамильтонова пути (если таковой существует), ибо никакая дуга не имеет эту точку своим началом, тогда как дуга, исходящая из любой другой точки, достигает точки D.

Это свойство выражается наличием единиц во всем столбце D и нулей во всей строке D (очевидно, за исключением их пересечения).

Может наблюдаться и обратная ситуация: если для некоторой точки вся строка состоит из единиц и весь столбец, за исключением пересечения, состоит из нулей, эта точка является началом каждого гамильтонова пути (если таковой существует).

Матрицу графа можно упростить вычеркивая предварительно все пары строк и столбцов, которым необходимо соответствует либо начало, либо конец каждого гамильтонова пути.

Так, в настоящем случае строка и столбец D могут быть заранее опущены; мы получаем матрицу М 1. образуем элементарные произведения элементов какой-нибудь строки (например, строки А) на элементы какого-нибудь столбца (скажем С), как если бы мы хотели вычислить М 1[2].

 

  A B C D E F
A            
B            
C            
D            
E            
F            

 

Элементарные произведения в порядке их следования таковы:

а) 1*0=0; б) 1*1=1; в) 0*1-0; г) 0*0=0; д) 1*0=0. проследим, что они означают. Пусть мы хотим отправиться из А в С.

Тогда:

а) не существует прямого пути из А в С;

б) существует прямой путь, идущий из А в B и путь из B в C; следовательно имеется путь длины 2 из А в С;

в) не существует прямого пути из А в С;

г) нет прямого пути из А в Е и так же нет пути из Е в С;

д) есть прямой путь из А в F, но нет ни какого пути из F в С.

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

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

Таким образом, мы приходим к матрице М 1[2] , все единицы которой обозначают существование путей единицы меньшей или равной 2, а нули - их отсутствие.

 

    A B C E F  
  A            
  B            
M^1[2]= C            
  E            
  F            
               

 

Из матрицы М 1[2] мы заключаем, что точка С необходимо является крайней точкой гамильтонова пути, если таковой существует. Опять отбрасываем строку и столбец С, откуда получаем.

 

 

      A B E F  
  A          
M^1[2]= B          
  E          
  F          
             

 

    A B E F  
  A          
M^1[3]= B          
  E          
  F          
             

 

 

Точно так же, как мы, вычислив М 11[2] , нашли пути длины меньшей или равной 2, найдем пути длины меньшей или равной 3, вычисляя М 11[3] . Матрица М 1[8] М 11[3] содержит только единицы; это доказывает существование путей длины меньшей или равной 3 между всеми точками ABEF, взятыми по две.

В частности, можно идти из Е в А через B и F. Вычислять М 11[4] которая, очевидно, содержит только единицы, уже нет смысла.

Вообще, когда вычисляют последовательные символические степени М, можно остановиться на том n для которого

М(n+1) = М (n)

ибо это означает, что в М не существует пути, длина которого превышает n. Матрица М [3] , полученная возвращением на место строк и столбцов C и D, может быть перегруппирована таким образом, чтобы все нули были расположены под главной диагональю, а единицы – над ней.

Квадратные матрицы, состоящие из единиц опирающихся на главную диагональ, образуют классы эквивалентности относительно закона: точка Х связана с точкой Y и обратно.

 

  A B C D E F
A            
B            
C            
D            
E            
F            

 

Например, А связанная с Е через B или же через F и B; Е связанная с А через В и F. Мы упростим исходный граф, разбив его на классы. Определение единственного гамельтонова пути AFEBCD становится совсем простым (рис 16.5).

 

       
 
   


 

Рис. 16.5

 

Возвращаясь к задаче Фреголи, которую мы решили выше, мы устанавливаем, что вычисление М [2] дало нам пути длины <= 2, вычисление М [4] - пути длины <= 4. Если бы мы вычислили М [7] , мы имели бы пути длины <= 7; в действительности мы вычислили М [8] , которая дает все пути, ибо каждый путь длины больше 7 проходит два раза через одну точку. Мы констатировали совпадении М [8] и М [4] .

Затем мы нашли классы эквивалентности, представляя М [4] в форме ABDFGCEH; в частности, BDF и EH образуют классы эквивалентности.

Замечание: Очевидно, что когда записывают отношения порядка (как, например, отношения предшествования) в некотором множестве, алгоритм Фаулкса представляет собой один из методов выяснения их совместимости (поскольку не должно существовать цикла). Он позволяет, кроме того, найти все отношения порядка между двумя, которые выводятся из предположений в силу транзитивности отношения порядка (из А<B и В<С следует, что А<С, хотя это отношение не было явно выражено ранее).

Только тогда, когда между точками нет связи виде отношения, можно вводить законно отношение индифферентности ><.

Зато на практике часто приходится иметь дело с соотношением частичного упорядочения, допускающим циклы. В этом случае этот алгоритм дает нам метод, хорошо приспособленный для решения задач.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-12-28 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: