Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Алгоритмы с возвратом (back-tracking)

 

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

Рис. 2.10:
а) Гамильтонов путь в графе;
б) Граф, в котором не существует гамильтонова пути.

 

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

Проблема существования гамильтонова пути принадлежит к классу так называемых NP- полных задач. Это - широкий класс задач, включающий фундаментальные задачи из теории графов, логики, теории чисел, дискретной оптимизации и других дисциплин, ни для одной из которых неизвестен полиноминальный алгоритм (т.е. с числом шагов, ограниченным полиномом от размерности задачи), причем существование полиномиального алгоритма для хотя бы одной из них автоматически влекло бы за собой существование полиномиальных алгоритмов для всех этих задач. Именно факт фундаментальности многих NP-полных задач в различных областях и то, что, несмотря на независимые друг от друга усилия специалистов в этих областях, не удалось найти полиномиального алгоритма ни для одной из этих задач, склоняет к предложению, что такого алгоритма не существует.

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

  • генерируем все n! различных последовательностей вершин;
  • для каждой из них проверяем, определяет ли она гамильтонов путь.

 

Такие действия требуют по меньшей мере n! n шагов, но функция от n подобного вида растет быстрее, чем произвольный многочлен, и даже быстрее, чем произвольная экспоненциальная функция вида a n,a > 1, ибо

 

n! n > [ n /2][ n /2] = a [ n /2]loga[ n /2]

Опишем теперь общий метод, позволяющий значительно сократить число шагов в алгоритмах типа полного перебора всех возможностей. Чтобы применить этот метод, искомое решение должно иметь вид последовательности {x1,..., xn}. Основная идея метода состоит в том, что мы строим наше решение последовательно, начиная с пустой последовательности e (длины 0). Вообще, имея данное частичное решение {x1,..., xi},мы стараемся найти такое допустимое значение xi+1, относительно которого мы не можем сразу заключить, что {x1,..., xi, xi + 1} можно расширить до некоторого решения (либо {x1,..., xi+1} уже является решением). Если такое предполагаемое, но еще не использованное значение xi+1 существует, то мы добавляем его к нашему частичному решению и продолжаем процесс для последовательности {x1,..., xi, xi+1}. Если его не существует, то мы возвращаемся к нашему частичному решению {x1,..., xi-1} и продолжаем процесс, отыскивая новое, еще не использованное допустимое значение xi' - отсюда название "алгоритм с возвратом" (англ.: backtracking).

Точнее говоря, мы предполагаем, что для каждого k > 0 существует некоторое множество Ak, из которого мы будем выбирать кандидатов для k -й координаты частичного решения. Очевидно, что множество Ak должны быть определены таким образом, что для каждого целочисленного решения {x1,..., xn} нашей задачи и для каждого k <= n множество Ak содержало элемент xk (на практике мы не можем вообще исключить ситуацию, когда множество Ak содержит некоторые "лишние" элементы, не появляющиеся а k -й координате ни одного целочисленного решения). Мы предполагаем также, что существует некоторая простая функция, которая произвольному частичному решению {x1,..., xi} ставит в соответствие значение P(x1,..., xi) (истина либо ложь) таким образом, что если P(x1,..., xi) = ложь, то последовательность {x1,..., xi} несомненно, нельзя расширить до решения. Если P(x1,..., xi) = истина, то мы говорим, что значение xi допустимо (для частичного решения {x1,..., xi-1}), но это отнюдь не означает, что {x1,..., xi-1},обязательно расширяется до полного решения. Этот процесс можно записать в виде следующей схемы:

<== предыдущая лекция | следующая лекция ==>
Пример 4. Построение дерева | Поиск в глубину в графе
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 2486; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.