Гамильтонов цикл: определение, алгоритм и примеры. Гамильтоновы цепи и циклы

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

Определение гамильтонова цикла

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

Формальное определение:

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

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

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

Паутина с росой в виде гамильтонова цикла

История открытия

Впервые задача о гамильтоновом цикле была сформулирована ирландским математиком Уильямом Роуаном Гамильтоном в 1859 году.

Это была головоломка о путешествии по граням додекаэдра (многогранника с 12 гранями). Каждая вершина додекаэдра символизировала город, а ребра - дороги между ними. Нужно было проложить маршрут, посетив каждый город ровно один раз и вернувшись в начальную точку.

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

Город с гамильтоновыми путями

Алгоритмы поиска гамильтонова цикла

Существует несколько методов поиска гамильтонова цикла в графе. Рассмотрим основные из них:

  • Метод полного перебора
  • Алгоритм Дейкстры
  • Эвристические методы

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

Алгоритм Дейкстры использует динамическое программирование для поиска оптимального гамильтонова цикла. Сложность этого метода существенно ниже полного перебора.

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

Применение гамильтоновых циклов

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

Применение в теории графов

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

Кроме того, гамильтоновы циклы используются при анализе других структур графов - деревьев, путей, цепей. Изучение их свойств часто опирается на соотношение с гамильтоновыми циклами.

Гамильтонов цикл в задаче коммивояжера

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

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

Применение в криптографии

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

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

Примеры гамильтоновых и негамильтоновых графов

Для наглядности рассмотрим несколько примеров графов, обладающих и не обладающих гамильтоновым циклом:

Полный граф

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

Цикл

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

Граф Петерсена

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

Этот граф удовлетворяет достаточному условию Дирака, но не имеет гамильтонова цикла.

Графы с мостами

Если граф имеет мост - ребро, удаление которого разрывает связность графа, то в таком графе гамильтонов цикл невозможен.

При наличии моста нельзя построить замкнутый путь, проходящий через все вершины.

Деревья

Любое дерево также не может иметь гамильтонов цикл, так как в дереве нет циклов в принципе. Максимум, что можно построить в дереве - это гамильтонов путь.

Свойства гамильтоновых графов

Связь со степенями вершин

Существует ряд теорем, связывающих наличие гамильтонова цикла в графе со степенями его вершин. Например:

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

Связь с факторами

Свойство графа быть гамильтоновым тесно связано с понятием фактора - покрывающего подграфа, в котором степени вершин равны 1.

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

NP-полнота

Задача о существовании гамильтонова цикла в произвольном графе является NP-полной. Это означает предположительную алгоритмическую сложность проверки данного свойства.

Поиск эффективных достаточных и необходимых условий для существования гамильтонова цикла - актуальная область исследований в теории графов.

Гамильтоновы пути и цепи

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

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

Алгоритмы поиска

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

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

Применение путей и цепей

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

Например, при построении эффективных маршрутов доставки или планировании инженерных коммуникаций.

Статья закончилась. Вопросы остались?
Комментарии 0
Подписаться
Я хочу получать
Правила публикации
Редактирование комментария возможно в течении пяти минут после его создания, либо до момента появления ответа на данный комментарий.