Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

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

Ai → Aj, (4.1)

т.е. выполнение подпрограммы Ai предшествует выполнению подпрограммы A j, i, j Î {1,2,…, n } или

Ai Aj, (4.2)

т.е. порядок выполнения программ Ai и Aj безразличен.

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

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

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

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

Ai → Aj , Ai → Aj, i, j Î {1,2,…, n } (4.3)

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

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

 
 

 
 

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

 

Вычисления следует прекратить, если RN = RN -1 .

На каждом цикле вычисления возможны некоторые упрощения матрицы, связанные с выявлением «начальных» и «конечных» вершин, ограничивающих возможность дальнейшего построения ГП из общего множества возможных путей в графе.

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

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

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

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

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

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

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

6. Увеличиваем на единицу номер цикла, т.е. N = N +1.

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

8. Проверяем условие выполнения равенства матриц (RN)' и (RN -1)'.

Если это условие выполняется, то переходим к п. 10, Иначе - к п. 9.

9. Проверяем условие равенства всех элементов матрицы RN единице. Если это условие выполняется, то нет необходимости в дальнейших вычислениях матрицы (R N)', так как очевидно, что (RN +1)'=(RN)', переходим к п. 10. Если нет - к п. 4.

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

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

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

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

Нахождение Гамильтоновых путей в этом случае значительно упрощается. В соответствии с классами эквивалентности мы получили упорядоченные группы вершин. В качестве начальной выбирается вершина из первого класса эквивалентности. Если их в нем несколько, то следующая выбирается из этого же класса и так до тех пор, пока не будут исчерпаны все вершины этого класса. Затем переходим к вершинам следующего класса и т.д. пока не будут использованы все вершины графа и построен ГП. Следует заметить, что при выборе очередной вершины необходимо обязательно проверять выполнение условий (4.3). Если условия не выполняются, очередность следования вершин из одного класса эквивалентности меняется. Максимальное число возможных вариантов сокращается до произведения B 1 ! ∙ B 2 ! ∙, …,Bm!

Пример. Пусть программа A состоит из 6 операций (подпрограмм) A 1, A 2,…, A 6, между которыми существуют следующие соотношения:

A 1A 2 , A 2A 3 , A 3A 4 , A 5A 2 , A 6A 2 ,

A 1A 4, A 2A 4, A 5A 4 , A 6A 4 ,

A 1A 6, A 2A 5 , A 6A 5

A 2 A 6 . (4.4)

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

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

1. Зададим номер цикла N = 1.

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

 
 

Рис. 4.1

 

3. Составим матрицу R 1 достижимости не более чем за один шаг.

 

4. Проверим матрицу R 1 на наличие начальной или конечной вершин в графе.

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

5. Вычеркиваем столбец и строку A 4. Получаем матрицу (R 1)' .

 

6. N =1+1=2.

7. Произведем булевое умножение матриц) (R 1)' Ä (R 1)' = (R 2)'.

Наличие 1 в матрице означает существование между соответствующими вершинами путей длиной меньшей или равной двум, а 0 - их отсутствие.

 

 

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

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

4. Рассмотрим матрицу (R 2) ' .

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

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

 

(R 2) ' = .

 

6. N =2+1=3.

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

 

(R 3) ' = .

 

8. (R 3) ' ¹ (R 2 ) '

9. Все элементы (R N) ', равны единице. Очевидно, что матрицы (R 4) ', (R 5) ' и т.д. также будут равны, т.к. будут иметь все элементы, равные единице.

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

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

 

 
 

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

 

Таким образом, получили три класса эквивалентности:,

- в первый класс входят вершины A 1, A 2, A 5, A 6;

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

- в третий - вершина A 4.

Т.е. в гамильтоновом пути вершины A 1, A 2, A 5, A 6 предшествуют вершине A 3, которая, в свою очередь, предшествует вершине A 4. Всего возможно 4! ∙ 1! ∙ 1! = 24 вариантов следования вершин.

С учетом необходимости выполнения условий (4.4) определение гамильтонова пути становится достаточно простым делом. В данном примере получим единственный ГП: A 1, A 6, A 5, A 2, A 3, A 4.

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




Поделиться с друзьями:


Дата добавления: 2017-01-13; Просмотров: 1710; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.035 сек.