Главная > Теория графов. Алгоритмический подход
НАПИШУ ВСЁ ЧТО ЗАДАЛИ
СЕКРЕТНЫЙ БОТ В ТЕЛЕГЕ
<< Предыдущий параграф Следующий параграф >>
Пред.
След.
Макеты страниц

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

Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике

ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO

ЧАСТЬ I

2. Гамильтоновы циклы в графе

Пока неизвестно никакого простого критерия или алгебраического метода, позволяющего ответить на вопрос, существует или нет в произвольном графе гамильтонов цикл. Критерии существования, данные в работах Поша [29], Нэша-Уильямса [25] и Оре [26], представляют теоретический интерес, но являются слишком общими и не пригодны для произвольных графов, встречающихся на практике (см. задачу 10.1). Алгебраические методы определения гамильтоновых циклов, появившиеся в литературе, не могут быть применены к задачам с более чем несколькими десятками вершин, так как они требуют слишком большого времени работы и большой памяти компьютера. Более приемлемым является способ Робертса и Флореса [30, 31], который не предъявляет чрезмерных требований к памяти компьютера, но время в котором зависит экспоненциально от числа вершин в графе. Однако другой неявный метод перебора [35, 6] имеет для большинства типов графов очень небольшой показатель роста времени вычислений в зависимости от числа вершин. Он может быть использован для нахождения гамильтоновых циклов в очень больших графах. В настоящей главе мы опишем алгебраический метод и два способа перебора.

2.1. Алгебраический метод

Этот метод основан на работе Йоу [37], Даниэльсона [11] и Дхавана [14] и включает в себя построение всех простых цепей с помощью последовательного перемножения матриц.

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

является суммой внутренних произведений всех цепей из длины Так как все цепи из представленные внутренними произведениями из являются

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

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

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

Рис. 10.1. Граф из примера 2.1.1.

2.1.1. Пример.

Рассмотрим граф, изображенный на рис. 10.1, матрица смежности которого равна

и модифицированная матрица смежности

Положим Матрица получается равной

Матрица почти такая же, как только подчеркнутые элементы в надо заменить нулями. Матрица равна

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

Матрица гамильтоновых цепей равна

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

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

Небольшая модификация вышеприведенного метода позволяет во много раз уменьшить необходимый объем памяти и время вычислений. Так как нас интересуют только гамильтоновы циклы и, как было отмечено выше, они могут быть получены из членов внутреннего произведения любой диагональной ячейки матрицы то необходимо знать только элемент (1,1). При этом на каждом этапе не обязательно вычислять и хранить всю матрицу достаточно лишь найти первый столбец из Эта модификация уменьшает необходимый объем памяти и время вычислений в раз. Однако даже при использовании этой модификации программа для ЭВМ [14], написанная на языке который позволяет построковую обработку литер и переменное распределение памяти, не была способна найти все гамильтоновы циклы в неориентированных графах с более чем примерно 20 вершинами и средним значением степени вершины, большим 4. Использовалась вычислительная машина с памятью байтов. Более того, даже для графа с вышеуказанными «размерами» данный метод использовал фактически весь объем памяти и время вычислений равнялось 1,8 минуты. Не такое уж незначительное время для столь небольшого графа.

1
Оглавление
email@scask.ru