- •В. Н. Степанов дискретная математика: графы и алгоритмы на графах
- •Предисловие
- •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-ую запрещен, то полагаем .
Пусть – множество гамильтоновых контуров на орграфе и
– длина гамильтонова контура . Рассмотрим комбинаторную оптимизационную задачу: требуется найти гамильтонов контур наименьшей длины
.
Такой гамильтонов контур называется оптимальным. Если на графе существует хотя бы один оптимальный гамильтонов контур, то эта задача имеет решение и называется задачей коммивояжера.