Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подготовка Сиакод.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.95 Mб
Скачать
  1. Алгоритмы с возвратом.

Общим методом организации исчерпывающего поиска, позволяющего значительно сократить число шагов в алгоритмах полного перебора, является “возвратный код” по упорядочиванию множества частичных возможных решений. Он основан на том, что мы пытаемся расширить текущее частичное решение, то есть изучить множество возможных полных решений, которые не противоречат текущему частичному решению. Если расширение невозможно на текущем шаге, то происходит возврат к предыдущему, более короткому, частичному решению и делается попытка его расширения другим способом.

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

Предположение: для каждого существует некоторое множество , из которого производится выбор кандидатов для -ой координаты частичного решения без учета ограничений задачи. В общем случае, ограничения, описывающие решение, говорят о том, из какого подмножества множества производится выбор кандидатов для расширения частичного решения от до .

Если частичное решения не предоставляет для выбора нового , то есть у частичного решения либо вовсе нет кандидатов для расширения, либо все кандидаты к данному моменту уже были использованы, то происходит возврат назад и выбор нового элемента из .

Предположение: существует некоторая функция, которая некоторому произвольному частичному решению ставит в соответствие функцию таким образом, что если , то частичное решение нельзя расширить до полного решения, если , то значение допустимо для частичного решения , но это не означает, что обязательно расширится до полного решения.

  1. Алгоритм нахождения гамильтоновых циклов в графе.

Каждый гамильтонов цикл можно представить в виде , где . Работу алгоритма поиска гамильтонова цикла можно проиллюстрировать процессом поиска в некотором дереве. Каждая вершина этого дерева соответствует некоторой последовательности , причем все вершины соответствующей последовательности являются сыновьями этой вершины. Корень соответствует пустой последовательности .

Рассмотрим полное дерево, состоящее из всех возможных последовательностей вида , где . Допустим, что элемент является допустимым для , то есть , если , и ни один элемент не является допустимым для , то есть , если .

Тогда вызов процедуры с первой вершины вызывает поиск в глубину во всем дереве, начиная от корня . Причем процесс поиска опускает рассмотрение вершин поддерева с корня до каждой встреченной недопустимой вершины. В этом и заключается эффективность алгоритма с возвратом по сравнению с полным перебором. Хотя для большинства приложений число шагов алгоритма с возвратом в наихудшем случае растет по экспоненте с возрастанием размерности задачи.