Определение Гамильтонова пути в графе

Гамильтонов путь в графе — это путь, проходящий через все вершины графа, причем каждая вершина встречается в нем только один раз. Если этот путь замкнут, то говорят о гамильтоновом цик­ле или контуре.

В качестве примера рассмотрим задачу определения очередности решения на ЭВМ вычислительной программы (алгоритма) А,состоящей из п подпрограмм Ai ; i=1,2,…,n , причем на порядок выполнения подпрограмм накладываются ограничения в виде

Ai → Aj (4.1)

(т.е. выполнение подпрограммы Ai предшествует выполнению подпрограммы Aj , i, j = 1,2,…,n) или

Ai Определение Гамильтонова пути в графе - student2.ru Aj (4.2)

(т.е. порядок выполнения программ Ai и Aj безразличен). Эту задачу удобно геометрически отобразить в виде графа, где каждой i вершине соответствует Ai - подпрограмма, а связи между подпрограммами соответствуют дугам или ребрам. Причем дуга соответствует связи Ai → Aj , а ребро - связи Ai Определение Гамильтонова пути в графе - student2.ru Aj .

Если предполагается, что программа A будет выполнена, когда выполнены все подпрограммы Ai , i=1,2,…,n (без повторений), то определение очередности выполнения подпрограмм Aiсводится к определению на графе Гамильтонова пути. Очевидно, что эту задачу можно решить перебором всех возможных вариантов с одновременной проверкой всех условий (4.1), (4.2). При n = 2 возможно всего два варианта, при n = 3 - шесть, при n=10 существует более трех с половиной миллионов возможных вариантов, из которых надо выбрать допустимые, удовлетворяющие условиям (4.1), (4.2).

Решение поставленной задачи может быть облегчено, если мы воспользуемся алгоритмом Фаулкса, позволяющим во многих случаях значительно уменьшить рассматриваемое количество возможных вариантов [4].

Алгоритм Фаулкса. Рассматривается n операций (вершины графа) A1, A2,…, An , между которыми существуют соотношения:

Ai → Aj , Ai → Aj , (i, j = 1,2,…,n) (4.3)

Задача состоит в том, что среди n! возможных путей найти путь (если это возможно) или несколько путей, проходящих один и только один раз через каждую изэтих вершин и удовлетворяющих написанным выше соотношениям - это так называемыеГамильтоновы пути,так как соотношения(4.3) определяют связи между вершинамиграфа, а путь в графе, проходящий только одинраз через все вершиныграфа, есть гамильтонов путь.

Вычисления, которые необходимо выполнить при использовании алгоритма Фаулкса, заключаются в нахождении матрицы RNпутем последовательногобулевого умножения исходной матрицы смежности R графа (матрицы достижимости за один шаг) саму на себяN раз.

 
  Определение Гамильтонова пути в графе - student2.ru

 
  Определение Гамильтонова пути в графе - student2.ru

Элементы rNij матрицыRN, определяются как

Вычисления следует прекратить, если RN = RN-1 (т.е. все элементы rNij = rN-1ij , i, j = 1,…,n).

Так как все вычисления производятся последовательно, и на каждом цикле вычисления возможны некоторые упрощения матрицы RNи исходной матрицы R, то в алгоритме вычисления необходимо задать номер цикла вычисления N и условие перехода к новому циклу вычисления в случае, если RN ¹ RN-1и номер нового цикла N=N+1.

Порядок решения задачи:

1. Задаем номер цикла вычислений N=0.

2. Используя соотношения (4.3), составляем граф, вершины которого есть операции, а направленные дуги графа определяются заданными соотношениями между операциями.

3. Составляем матрицу смежности R графа, элементы rij которой могут принимать значения 0 либо 1. Если rij = 1, то это указывает на то, что за операцией (вершиной) Ai должна следовать операция (вершина) Aj .

Полученная таким образом матрица R является булевой матрицей, поскольку каждый элемент может принимать значения 0 или 1. Эта матрица является исходной для всех дальнейших вычислений.

4. Увеличиваем на единицу номер цикла, т.е. N=N+1 (на первом цикле вычислений N=0+1=1 и матрица RN= R есть исходная матрица смежности R , которая, кроме того, равна R0 ).

5. Используя полученную матрицу RN-1 , длякаждой операции (вершины графа) проверяем принадлежность ее кначальной или конечной вершине Гамильтонова пути.

Если операция является начальной вершиной Гамильтонова пути, то во всей строке матрицы стоят единицы, а во всем столбце (за исключением их пересечения) - нули. Если эта операция является конечной вершиной Гамильтонова пути, то во всей строке матрицы стоят нули (за исключением их пересечения), а во всем столбце - единицы.

6. Упрощаем матрицу графа RN-1 , т.е. получаем матрицу (RN-1)' , за счет вычеркивания строк и столбцов, которым соответствует либо начало, либо конец Гамильтонова пути.

7. Получаем матрицу RN , выполнив булевое умножение матрицы (RN-1)' на матрицу (R)' , которая получается из исходной матрицы смежности графа R вычеркиванием строк и столбцов, соответствующих началу и концу Гамильтонова пути во всех циклах вычислений.

8. Проверяем условие выполнения равенства матриц RNи (RN-1)', то есть равенство каждого элемента rNij = (rN-1ij)' . Если это условие выполняется, то переходим к п. 10, если нет - к п. 9.

9. Проверяем условие равенства всех элементов матрицы RNединице.

Если все элементы матрицы rij = 1, то нет необходимости в дальнейших вычислениях матрицы RN+1 , так как очевидно RN= RN+1 , т.е. rNij = 1, для " (i, j) = 1, 2,…, n

Если равенство выполняется, переходим к п. 10, если нет - к п. 4.

10. Составляем матрицу Rb , возвращая в матрицу RN , строки и столбцы, вычеркнутые в п. 6 (во всех циклах вычислений).

11. Составляем матрицу Rc , перегруппировывая строки и столбцы матрицы Rb таким образом, чтобы все нули были расположены под главной диагональю, а единицы - над ней.

Квадратные матрицы, состоящие из единиц, опирающихся на главную диагональ, образуют классы эквивалентности вершин. Если для данного графа мы получилиm классов эквивалентности (m £ n), то есть B1,…,Bm , и в каждый класс эквивалентности Bd , d = 1,2,…,mвходят Sdвершин графа, то можно сказать, что вершины, входящие в класс эквивалентности Bd, расположенные выше и левее класса эквивалентности Bl в матрице Rcбудут предшествовать в Гамильтоновом пути вершинам из класса эквивалентности Bl .

Нахождение Гамильтоновых путей в этом случае значительно упрощается.

Рассмотрим пример. Считаем, что программа A состоит из 6 операций (подпрограмм) A1, A2,…, A6 , между которыми существуют следующие соотношения:

A1 → A2 , A2 → A3 , A3 → A4 , A5 → A4 , A6 → A4 ,

A1 → A4, A2 → A4, A6 → A5 ,

A1 → A6, A2 → A5 ,

A2 → A6 . (4.4)

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

Для решения задачи воспользуемся приведенным алгоритмом.

1. Номер цикла N = 0.

2. Составим граф (рис. 4.1), соответствующий соотношениям (4.4).

 
  Определение Гамильтонова пути в графе - student2.ru

Рис. 4.1

3. Составим матрицу смежности R графа.

Определение Гамильтонова пути в графе - student2.ru
Определение Гамильтонова пути в графе - student2.ru

4. N=0+1=1.

5. Рассмотрим матрицу R.

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

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

6. Вычеркиваем столбец и строку A4. Получаем матрицу R ' .

7. Произведем умножение матриц R ' Ä R ' = R2 .

В качестве примера рассмотрим получение элемента r21,3 матрицы R2 , т.е. элемента, расположенного в первой строчке и в третьем столбце матрицы R2 r21,3 = 1× 0 Ú 1× 1 Ú 0 × 1 Ú 0 × 0 Ú 1 × 0 = 1 (см. рис. 4.2).

 
  Определение Гамильтонова пути в графе - student2.ru

Рис. 4.2

Каждый член этой суммы означает следующее. Пусть мы хотим попасть из A1 в A3. Тогда:

1 × 0 = 0 - существует прямой путь из A1 в A1, но нет из A1 в A3;

1 × 1 = 1 - существуют прямые пути из A1 в A2 и из A2 в A3; следовательно, имеется путь длины 2 из A1 в A3;

0 × 1 = 0 - не существует прямого пути из A1 в A3, но есть из A3 в A3;

0 × 0 = 0 - нет прямого пути из A1 в A5 и из A5 в A3;

1 × 0 = 0 - существует прямой путь из A1 в A6, но нет из A6 в A3.

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

Проделав это для всех элементов, мы получим матрицу R2 , все единицы которой обозначают существование путей длиной меньшей или равной 2, а 0 - их отсутствие.

Определение Гамильтонова пути в графе - student2.ru

8. Проверяем условие равенства R2 и R ' . Так как они не равны, переходим к п. 9.

9. Проверяем условие равенства всех элементов матрицы единицы; так как оно не выполняется, то снова возвращаемся к п.4.

4. N=2.

5. Рассматриваем матрицу R2 .

Вершина A3 , является конечной вершиной гамильтонова пути на данном цикле вычислений.

6. Вычеркиваем столбец и строку A3. Оставшаяся матрица имеет вид

(R2 ) ' = Определение Гамильтонова пути в графе - student2.ru .

7. Производим умножение (R2 )'Ä R ' = R3.

R 3 = Определение Гамильтонова пути в графе - student2.ru .

8. R3 ¹ (R2 ) '

9. Все элементы R3, равны единице. Очевидно, что и R4 и R5 и т.д. также будут равны, т.е. будут иметь все элементы, равные единице).

Переходим к п.10.

10. Матрицу R b получаем возвращением строк и столбцов, вычеркнутых в п. 6.

Определение Гамильтонова пути в графе - student2.ru
Определение Гамильтонова пути в графе - student2.ru

11. Матрицу R c получаем группировкой строк и столбцов матрицы R b(п.10), чтобы все нули были расположены под главной диагональю, а единицы - над ней:

 
  Определение Гамильтонова пути в графе - student2.ru

Определение Гамильтонова пути в графе - student2.ru
Таким образом, мы получили три класса эквивалентности:

- в первый класс входят вершины A1 A2 A5 A6;

- во второй - вершина A3;

- в третий - вершина A4.

Определение гамильтонова пути становится совсем простым делом. С учетом необходимости выполнения условий (4.4) для вершин, входящих в один класс эквивалентности, он может быть таким: A1,A6,A5,A2,A3,A4.

Алгоритм Фаулкса в общем случае не решает однозначно задачу определения Гамильтонова пути, он только частично упорядочивает множество вершин, снижая тем самым размерность решаемой задачи. В данном примере видно, что в Гамильтоновом пути вершина A3 обязательно должна быть после вершин, входящих в первый класс эквивалентности, а вершина A4 - после вершин, входящих в первый и второй классы эквивалентности.

В случае, когда в каждый класс эквивалентности входит одна вершина, алгоритм Фаулкса определяет Гамильтонов путь однозначно.

Наши рекомендации