- •В. Н. Степанов дискретная математика: графы и алгоритмы на графах
- •Предисловие
- •1. Основные понятия теории графов
- •1.1. Граф и его разновидности
- •1.2. Морфизмы графов
- •1.3. Степени вершин
- •1.4. Маршруты, цепи, циклы, связность
- •1.5. Операции над графами
- •1.6. Примеры графов
- •1.7. Метрические характеристики графов
- •1.8. Представления графов
- •2. Алгоритмы и сложность
- •2.1. Понятие алгоритма
- •2.2. Сложность алгоритма
- •2.3. Запись алгоритма
- •3. Обходы графов
- •3.1. Поиск в глубину на графе
- •3.2. Поиск в ширину на графе
- •3.3. Алгоритм выделения компонент связности
- •4. Деревья
- •4.1. Деревья. Свойства деревьев
- •4.2. Остовы. Теорема Кирхгофа
- •4.3. Теорема Кэли
- •4.4. Фундаментальная система циклов. Цикломатическое число
- •4.5. Алгоритм отыскания фундаментального множества циклов на графе
- •5. Остов минимального веса. Алгоритм Краскала и Прима
- •5.1. Алгоритм д. Краскала
- •5.2. Алгоритм р. Прима
- •6. Кратчайшие пути между вершинами графа
- •6.1. Алгоритм Дейкстры
- •6.2. Алгоритм Флойда
- •7. Эйлеровы графы
- •7.1. Теорема Эйлера
- •7.2. Алгоритм Флёри
- •8. Гамильтоновы графы
- •8.1. Гамильтоновы маршруты. Задача коммивояжера
- •8.2. Существование гамильтоновых маршрутов
- •9. Алгоритмы отыскания гамильтоновых циклов
- •9.1. Алгоритм с возвратом (полного перебора)
8. Гамильтоновы графы
8.1. Гамильтоновы маршруты. Задача коммивояжера
Гамильтоновым циклом на графе называется простой цикл, содержащий все его вершины. Граф называется гамильтоновым, если в нем имеется гамильтонов цикл. Гамильтоновой называют и простую цепь, содержащую каждую вершину этого графа. Граф, содержащий гамильтонову цепь, называется полугамильтоновым. Аналогично определяется гамильтонов контур и гамильтонов путь на ориентированном графе.
Рассмотрим несколько задач, приводящих к нахождению гамильтоновых маршрутов.
1. Задача Гамильтона. Каждой из двадцати вершин додекаэдра приписывается название одной из столиц государства. Требуется, проходя по ребрам додекаэдра, вернуться в исходный город, посетив каждую столицу ровно один раз. Эта задача приводит к отысканию в графе додекаэдра гамильтонова цикла.
2. Задача о шахматном коне. Требуется обойти конем все клетки шахматной доски, побывав в каждой клетке по одному разу и последним (64-м) ходом вернуться в начальную клетку. Задача сводится к нахождению гамильтонова цикла симметричного графа. Решение Эйлера представлено в таблице:
3. Задача коммивояжера. Коммивояжер должен объехать ряд населенных пунктов, побывав в каждом пункте только один раз и вернуться в исходный пункт. Какой маршрут следует выбрать коммивояжеру, чтобы пройденный путь был наименьшей длины?
Рассмотрим
граф, вершинами которого являются
населенные пункты, а ребрами (дугами)
– дороги. Каждому ребру (дуге)
припишем вес
– длину соответствующей дороги. Тогда
требуется найти на этом графе гамильтонов
маршрут наименьшей длины.
Задача коммивояжера является классической задачей дискретной оптимизации и имеет многочисленные приложения: транспортные задачи, задачи соединения пунктов линиями электропередач, водопроводами, газо- и нефтепроводами.
4.
Задача планирования.
В ряде отраслей промышленности, например,
в химической и фармацевтической,
возникает следующая задача планирования.
На автоматической линии последовательно
производится продукция различного
наименования. Допустим, что эта продукция
производится в непрерывном цикле: после
производства
-го
продукта возобновляется производство
первого продукта в том же фиксированном
цикле. Для каждой пары продукции
известна стоимость
перенастройки автоматической линии
для перехода от производства продукта
к производству продукта
и
– стоимость перенастройки на обратный
переход. Возникает вопрос: можно ли
найти такую циклическую последовательность
производства продуктов, при которой
суммарная стоимость затрат на перенастройку
была бы наименьшей?
Рассмотрим ориентированный граф, вершинами которого являются наименования продуктов производства, а дуги изображают перенастройку линии производства при переходе от производства продукта к производству продукта . Тогда задачу можно сформулировать следующим образом: на орграфе найти гамильтонов контур наименьшей длины.
Задача
распознавания гамильтоновых маршрутов
имеет внешнее сходство с задачей
распознавания эйлеровых маршрутов.
Однако решение первой задачи наталкивается
на значительные трудности. Сложность
решения задач нахождения гамильтоновых
маршрутов проявляется, во-первых, в
отсутствии достаточно общих критериев
их существования, и, во-вторых, в отсутствии
эффективных алгоритмов их отыскания.
Интуитивно понятно, что если граф
содержит много ребер и эти ребра к тому
же достаточно равномерно распределены,
то граф, вероятно, является гамильтоновым.
Так, например, в полном графе с
вершинами существует
гамильтоновых циклов. Гамильтоновы
циклы наименьшей длины в полном графе
можно найти по следующей простой схеме.
Действительно, зафиксируем любую
вершину. Из нее
способами можно перейти в другую вершину.
Из второй вершины
способами возможен переход в третью
вершину и т.д. В результате получим
гамильтоновых циклов, из которых
выбирается минимальный. Поскольку
с ростом
растет быстрее, чем любой полином от
(при
),
и
время решения задачи пропорционально
числу возможных циклов, то нахождение
гамильтоновых циклов методом полного
перебора
оказывается практически невозможным
даже для сравнительно небольших
.
Например, при
число возможных вариантов равно
51 090 942 171 709 400 000.
Известно
[4], что задача нахождения гамильтоновых
маршрутов принадлежит к классу
-полных
задач (см. пункт 2.2).
Сформулируем
задачу коммивояжера. Пусть орграф с
вершинами задан матрицей расстояний
,
где
– длина дуги
.
Если переход из i-ой
вершины в j-ую
запрещен, то полагаем
.
Пусть
– множество гамильтоновых контуров
на орграфе и
– длина
гамильтонова контура
.
Рассмотрим комбинаторную оптимизационную
задачу: требуется найти гамильтонов
контур
наименьшей длины
.
Такой гамильтонов контур называется оптимальным. Если на графе существует хотя бы один оптимальный гамильтонов контур, то эта задача имеет решение и называется задачей коммивояжера.
