34. Гамильтонов цикл в графе. Алгоритм с возвратом для поиска гамильтонова пути. Оценки вычислительной сложности алгоритма.
Цикл, проходящий через все вершины, причем только один раз, и завершающийся в той же точке, называется гамильтоновым циклом. В отличие от эйлеровых путей не известно ни одного простого необходимого и достаточного условия для существования гамильтоновых путей. Не известен так же алгоритм, который проверял бы гамильтоновы пути. В полносвязном графе количество циклов Гамильтона (n-1)! Проблема существования гамильтонова пути принадлежит к классу так называемых NP-полных задач. Это широкий касс задач, включающий фундаментальные задачи из теории графов, логики, теории чисел, дискретной оптимизации и других дисциплин, ни для одной из которых не известен полиномиальный алгоритм (т.е. с числом шагов, ограниченным полиномом от размерности задачи), причем существование полиномиального алгоритма для хотя бы одной из них автоматически влекло бы за собой существование полиномиальных алгоритмов для всех этих задач. Именно факт фундаментальности многих NP-полных задач в различных областях и то, что, несмотря на независимые друг от друга усилия специалистов в этих областях, не удалось найти полиномиального алгоритма ни для одной из этих задач, склоняет к предположению, что такого алгоритма не существует.
Алгоритм. Данные: Граф G = V, E, представленный списками инцидентности ЗАПИСЬ[v], v V. Результаты: Список всех гамильтоновых циклов графа G.
Работу этого алгоритма, так же как и произвольного алгоритма с возвратом, можно проиллюстрировать процессом поиска в некотором дереве. Каждая вершина дерева естественным образом соответствует некоторой последовательности x1, ..., xk, причем вершины, соответствующие последовательностям вида x1, ..., xk, y являются сыновьями этой вершины ( корень соответствует пустой последовательности ). Рассмотрим полное дерево D, состоящее из всех возможных последовательностей вида x1, ..., xk, где 0 k n и xi Ai для 1 i k, и временно допустим, что каждый элемент y Ak является допустимым для x1, ..., xk -1, если k n, и ни один элемент не является допустимым для x1, ..., xk -1, если k > n; другими словами, P(x1, ..., xk-1, xk) = истина, если k n, и P(x1, ..., xk-1, xk) = ложь, если k n (xi Ai для 1 i k). Тогда нетрудно отметить, что вызов AP(1) вызывает поиск в глубину во всем дереве D (начиная от корня ). Для случая менее тривиальной функции P, определяющей допустимость вершин, процесс поиска опускает рассмотрение вершин поддерева с корнем в каждой встреченной недопустимой вершине, т.е. вершине, соответствующей последовательности x1, ..., xk, для которой P(x1, ..., xk) = ложь). В этом, собственно говоря, заключается эффективность алгоритма с возвратом в отношении полного перебора всех возможностей. Следует отметить, что для большинства приложений число шагов алгоритма с возвратом хотя и будет меньше, чем в случае полного перебора, однако же в наихудшем случае растет по экспоненте с возрастанием размерности задачи. Это справедливо и для случая, если мы ищем только одно, а не все решения (тогда мы просто прерываем выполнение алгоритма после получения первого решения; отметим, что когда задача не имеет решения, эта модификация не влияет на ход выполнения алгоритма).
Алгоритм «в лоб» — это полный перебор всех возможностей: генерируем все n! различных последовательностей вершин и для каждой из них проверяем, определяет ли она гамильтонов путь. Такие действия требуют по меньшей мере n! n шагов, но функция от n подобного вида растет быстрее, чем произвольный многочлен, и даже быстрее, чем произвольная экспоненциальная функция вида an, a > 1, ибо
procedure ГАМИЛЬТ(k) {генерация всех гамильтоновых циклов, являющихся расширением последовательности X[1], . . ., X[k – 1]: массив X — глобальный } begin for y Î ЗАПИСЬ [X[k – 1]] do if (k = n +1) and (y = v0) then write(X[1], . . ., X[n], v0) else if DOP[y] then begin X[k] := y; DOP[y] := ложь; ГАМИЛЬТ (k +1); DOP[y] := истина end end; { ГАМИЛЬТ } begin { главная программа } for v Î V do DOP[v] := истина; { инициализация } X[1] := v0; { v0 = произвольная фиксированная вершина графа } DOP[v0] := ложь; ГАМИЛЬТ (2); end. |
!!!! для большинства приложений число шагов алгоритма с возвратом хотя и будет меньше, чем в случае полного перебора, однако же в наихудшем случае растет по экспоненте с возрастанием размерности задачи.
- 2. Операции над множествами. Круги Эйлера. Покрытия и разбиения. Классы разбиения.
- 3. Законы алгебры множеств. Формула включений и исключений.
- 5. Соответствия. Способы задания соответствий.
- 6. Инволюция (обращение) соответствий. Объединение, пересечение, дополнение, произведение соответствий.
- 7. Функциональные соответствия, их связь с графиками функций.
- 8. Соответствие Галуа и его роль в проективном распознавании образов. Замкнутое подмножество.
- 9. Отношение. Бинарное отношение. Рефлексивное, симметричное, антисимметричное, асимметричное, транзитивное отношения.
- Унарные:
- Бинарные:
- Соответствия a, b, r
- 10. Отношение эквивалентности. Фактор-множество множества по отношению.
- 11. Отношение предпорядка, упорядоченности, строгой упорядоченности. Отношение частичного порядка.
- 12. Замыкание отношений. Рефлексивное, симметричное, транзитивное замыкание отношений.
- 13. Понятие нечеткого множества. Функция принадлежности. Способы формализации нечетких множеств. Наиболее распространенные параметрические функции принадлежности.
- 14. Основные логические операции над нечеткими множествами и их свойства.
- 15. Диаграмма Хассе как способ задания отношения частичного порядка на множестве.
- 16. Отображения. Изоморфизм. Автоморфизм. Гомоморфизм. Эпиморфизм. Эндоморфизм. Мономорфизм. Биморфизм.
- 17. Бинарная операция и ее основное множество. Способы задания бинарной операции. Таблица Кэли. Операционный квадрат таблицы Кэли.
- 18. Группоид. Квазигруппа. Латинский квадрат. Лупа. Полугруппа. Моноид. Группа. Абелева группа.
- 19. Группа симметрий фигуры.
- 20. Группа подстановок.
- 21. Иерархия систем с двумя бинарными операциями. Кольцо. Тело. Поле (коммутативное тело). Поле Галуа.
- 22. Решетка (структура). Решетка как частично упорядоченное множество.
- 23. Решетка как универсальная алгебра.
- Графы и ориентированные графы
- 27. Виды графов: двудольные графы, регулярные графы, полные графы, деревья, планарные графы
- 28. Изоморфизм графов.
- 29. Способы задания графов.
- 32. Эйлеров путь в графе. Задача о кенигсбергских мостах. Эйлеров цикл. Теорема о существовании эйлерова цикла.
- 33. Алгоритм нахождения эйлерова цикла и его вычислительная сложность.
- 34. Гамильтонов цикл в графе. Алгоритм с возвратом для поиска гамильтонова пути. Оценки вычислительной сложности алгоритма.
- 35. Задача коммивояжера. Алгоритм поиска субоптимального решения.
- 36. Задача построения минимального остовного дерева. Алгоритм Краскала. Алгоритм Прима. Оценка вычислительной сложности этих алгоритмов.
- 37. Перенумерация вершин графа. Алгоритм топологической сортировки.
- 39. Принцип оптимальности Беллмана. Алгоритм нахождения кратчайшего пути в ориентированном графе и его вычислительная сложность.
- 1 Begin
- 40. Алгоритм вычисления расстояний между всеми парами вершин графа. Общий случай.
- 41. Алгоритм нахождения расстояния от источника до всех остальных вершин в графе с неотрицательными весами дуг — метод Дейкстры. Оценка вычислительной сложности.
- 1 Begin
- 5 Begin
- 42. Алгоритм топологической сортировки. Алгоритм нахождения расстояния от источника до всех остальных вершин в графе в случае бесконтурного графа. Оценка вычислительной сложности
- 43. Знаковые графы и их практическое применение. Задачи из области социологии малых групп, экономики и политики.
- 44. Теорема о структуре (теорема Харари о балансе).
- 45. Знаковые орграфы как модель когнитивных карт. Контуры положительной и отрицательной обратной связи и устойчивость/изменчивость моделей на орграфах.
- 46. Двудольные графы. Необходимое и достаточное условие двудольности графа.
- 47. Сети Петри. Функционирование сети Петри. Конечные разметки сети.
- Иллюстрация к правилу срабатывания перехода
- 48. Сети Петри. Ограниченность, безопасность, сохраняемость, достижимость, живость. Моделирование на сетях Петри.
- 50. Конечный автомат как математическая модель устройства с конечной памятью и как управляющая система. Способы описания конечных автоматов: перечислительный; диаграмма состояний; таблица состояний.
- 51. Алгебра логики. Функции алгебры логики. Существенные и несущественные переменные. Бинарные логические операции. Формула. Суперпозиция функций. Таблицы истинности и таблицы Кэли.
- 52. Формы записи операций (функций) — инфиксная, префиксная, постфиксная. Эквивалентные формулы.
- 53. Основные схемы логически правильных рассуждений.
- 54. Функционально полные системы (базисы). Булева алгебра логики. Функциональная полнота системы булевых функций. Примеры других алгебр логики.
- 55. Основные эквивалентные соотношения в булевой алгебре. Выражение через дизъюнкцию, конъюнкцию и отрицание других логических бинарных операций. Двойственность.
- 56. Булева алгебра логики. Сднф и днф. Карта Карно. Функциональные схемы как приложение булевых функций.
- 57. Функции k-значной логики и их задание с помощью таблицы истинности и с помощью таблицы Кэли. Примеры k-значных логик.
- 59. Квантор всеобщности и квантор существования.
- 61. Истинные формулы и эквивалентные соотношения логики предикатов.
- 62. Префиксная нормальная форма. Процедура получения пнф.
- 63. Формальные теории. Принципы построения формальной теории.
- 64. Исчисление высказываний.