xn = cn / nn!, с > 1.
Нетрудно заметить, что
xn+1 = xnc / (n + 1).
Поэтому, как только n + 1 > c эта варианта становится убывающей, а поскольку она ограничена нулем, то предел ее также есть нуль.
Для решения NP‑полных задач известен метод, позволяющий сократить число шагов, сводя задачу от факториальной к экспоненциальной сложности. Этот метод известен под названием «backtracing» или «алгоритм с возвратами». Его суть в применении к задаче построения гамильтоновых циклов состоит в следующем.
Будем искать решение в виде последовательности вершин v1, v2, …, vn, начиная от корневой вершины v1. Имея частичное решение v1, v2,…, vi, i < n, пытаемся найти такое допустимое значение vi + 1, относительно которого можно предположить, что оно может расширить частичное решение до v1, v2,…, vi + 1. Если такое предположение возможно, то vi + 1 включается в частичное решение и процесс продолжается. Если никакая вершина не может претендовать на vi + 1, то следует возврат на шаг к vi - 1, а vi из данного частичного решения исключается. Процесс поиска нового допустимого значения продолжается, начиная с vi - 1. Когда vn найдено, отмечают v1, v2, …, vn как Решение:
Если поставлена задача отыскания всех решений, то попытка получения каждого нового решения осуществляется возвратом на шаг от vn в предположении, что решение как бы получено не было. Таким образом, отыскивается множество всех решений, которое, в частности, оказывается пустым, если гамильтонова цикла на графе не существует.
Из описания алгоритма с возвратами видно, что задача построения всех гамильтоновых циклов на графе G может быть решена путем сопоставления исходному графу некоторого другого графа G, построенного из частично пересекающихся цепей v1, v2, …, vi, (i n). Подмножество G, состоящее из цепей v1, v2, …, vn, таких что vn смежна с v1 на G представляет множество решений задачи. Граф G называется соотнесенным графом.
Рассмотрим решение задачи о коммивояжере на примере графа G, представленного на рисунке 3. Имеем пять пунктов V = {1, 2, 3, 4, 5}. Стоимость доставки информации из пункта i в пункт j представлена числами над ребрами графа. Требуется, используя компьютерную сеть, моделируемую данным графом, обеспечить перекличку пунктов (например, фирм, принадлежащих одной корпорации и т.д.), начиная из пункта 1. Для решения поставленной задачи построим гамильтонов цикл минимальной стоимости передачи информации, либо несколько таких циклов в случае их одинаковой стоимости.
Задачу будем решать в два этапа. Вначале построим все гамильтоновы циклы из пункта 1. Для этого применим алгоритм с возвратами. Затем на множестве полученных циклов выберем циклы минимальной длины.
Построение цепей графа G применением алгоритма с возвратами поясняется рисунком 3. справа. На этом рисунке цепи, соответствующие гамильтоновым циклам, выделены жирными линиями.
Всего имеем четыре гамильтоновых цикла:
{1, 2, 3, 5, 4, 1}
{1, 2, 5, 3, 4, 1},
{1, 4, 3, 5, 2, 1},
{1, 4, 5, 3, 2, 1}.
Стоимости передачи информации каждым из этих циклов вычисляются ниже:
9+10+2+2+6 = 29,
9+8+2+5+6 = 30,
6+5+2+8+9 = 30,
6+2+2+10+9 = 29.
Решению поставленной задачи отвечают гамильтоновы циклы a) и d).
Можно показать, что алгоритмы с возвратами имеют вычислительную сложность О(сn), где c > 1 — константа, определяемая свойствами присоединенного графа. Такое быстродействие при больших n значительно выше, чем в случае применения алгоритмов факториальной сложности. Например, возвращаясь к рассмотренному выше примеру оценки быстродействия алгоритма с возвратами при n = 20 видим, что в случае, когда с = 2 (граф G двоичное дерево)
G G
2 1
(9) (10) 2 4
3 5 3 5
(8)
4 5 3 4 2 5 2 3
1 5 (2 ) 3
(2) 1 5 4 4 1 3 1 5 2 1 3 2
(6) (5)
4 1 1 1 1
Рисунок 3.
имеем всего 220 или порядка 106 вычислительных операций. На любом современном компьютере это практически не займет времени. Однако, при увеличении размерности задачи всего лишь в несколько раз снова возникают проблемы реального времени. Это способствует развитию новых идей построения гамильтоновых циклов.
Do'stlaringiz bilan baham: |