Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Дискретка_Экзамен_Ответы / комб / 2 метод поиска с возвращением

.docx
Скачиваний:
67
Добавлен:
11.03.2015
Размер:
18.07 Кб
Скачать

2.2. Метод поиска с возвращением

Пусть задача имеет множество решений, каждое из которых можно представить последовательностью R конечной, но, в общем случае, неопределённой длины, состоящей из элементов, принадлежащих некоторому множеству А, и требуется найти все решения задачи. Их можно найти, используя метод поиска с возвращением, который заключается в следующем.

Для получения одного решения будем последовательно, элемент за элементом, формировать последовательность R. Сначала определим подмножество элементов множества А, которые можно поставить на 1-ое место и один из них поставим на 1-ое место. Затем, по аналогии, будем определять и ставить элементы на 2-ое, 3-е и т.д. место, продвигаясь по последовательности R вперёд, т.е. делать шаги вперёд. Так, двигаясь вперёд, на некотором i-ом шаге мы либо получим одно из решений (случай 1), либо обнаружим, что во множестве А нет ни одного элемента, который можно поставить на очередное место, не нарушая условие задачи (случай 2). Случай 2 означает, что ни одно решение задачи не содержит в качестве первых i-1 элементов элементы, поставленные в последовательность R. В этой ситуации нужно сделать шаг назад, к i-1-му месту и попытаться поставить другой допустимый элемент на i-1-ое место. В случае 1, когда решение получено, для продолжения поиска других решений необходимо попытаться поставить другой допустимый элемент на i-ое место, а если такого элемента нет, то нужно сделать шаг назад. Если нужно выполнить шаг назад тогда, когда находимся на 1-ом месте в последовательности R, то поиск решений прекращается, все решения найдены.

Метод поиска с возвращением можно реализовать на ЭВМ, используя рекурсивный или итеративный алгоритмы, структуры которых представлены на рис.2.1 и рис.2.2 соответственно.

Поиск с возвращением(i)

Ri := x

М := множество элементов, которые можно поставить на i-ое место

xМ

Решение получено ?

+

Шаг вперёд к i+1

Поиск с возвращением(i+1)

R

Выход (шаг назад к i-1)

Рис.2.1. Рекурсивный алгоритм поиска с возвращением

Начало

Инициализация стека.

Множество элементов, которые можно поставить на 1-ое место, положить в стек.

i := 1

i > 0

М := взять из стека

M ≠ 

+

Ri := x | xM

M-{x} в стек

Решение получено ?

+

Шаг вперёд i := i+1

Множество элементов, которые можно поставить на i-ое место, положить в стек.

Шаг назад

i := i-1

R

Конец

Рис.2.2. Итеративный алгоритм поиска с возвращением

Рекурсивная подпрограмма формирует i-ый элемент последовательности R, поэтому при первом обращении к ней нужно передать параметр, равный 1.

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