КАТЕГОРИИ: Архитектура-(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) |
Алгоритм поиска с возвращением, их реализация с помощью рекурсий и динамических структур
Лекция №23 Рассмотрим общий случай, когда решение задачи имеет вид вектора (а1, а2,…), длина которого не определена, но ограничена сверху некоторым (известным или неизвестным) числом r, а каждое аi является элементом некоторого конечного линейно упорядоченного множества Аi. Таким образом, при исчерпывающем поиске в качестве возможных решений мы рассматриваем элементы множества А1 ´ А2 ´… ´ Аi для любого i, где i£r, и среди них выбираем те, которые удовлетворяют ограничениям, определяющим решение задачи. В качестве начального частичного решения берется пустой вектор () и на основе имеющихся ограничений выясняется, какие элементы из А1 являются кандидатами для их рассмотрения в качестве а1 (множество таких элементов а1 из А1 ниже обозначается через а1). В качестве а1 выбирается наименьший элемент множества S1, что приводит к частичному решению (а1). В общем случае ограничения, описывающие решения, говорят о том, из какого подмножества Sk множества Аk выбираются кандидаты для расширения частичного решения от (а1, а2,…, аk-1) до (а1, а2,…, аk-1, аk). Если частичное решение (а1, а2,…, аk-1) не предоставляет других возможностей для выбора нового аk (т.е. у частичного решения (а1, а2,…, аk-1) Общую схему алгоритма, осуществляющего поиск с возвращением для нахождения всех решений, можно представить в следующем виде: k:=1;
Более коротко общую процедуру поиска с возвращением можно записать в рекурсивной форме: procedure ПОИСК (X: ВЕКТОР; i: Integer); Здесь || обозначает операцию конкатенации (соединения) двух векторов, т.е. Вызов ПОИСК((),1) находит все решения, причем все возвраты скрыты в механизме, регулирующем рекурсию. Для иллюстрации того, как описанный метод применяется при решении конкретных задач, рассмотрим задачу нахождения таких расстановок восьми ферзей на шахматной доске, в которых ни один ферзь не атакует другого. Решение расстановки ферзей можно искать в виде вектора (а1, а2, а3, а4, а5, а6, а7, а8 ), где аi – номер вертикали, на которой стоит ферзь, находящийся в i - й горизонтали, т.е. А1 = А2 = А3 = А4 = А5 = А6 = А7 = А8 ={1,2,3,4,5,6,7,8}. Каждое частичное решение – это расстановка N ферзей (где 1£N£8) в первых N горизонталях таким образом, чтобы эти ферзи не атаковали друг друга. Заметим, что общая процедура поиска с возвращением при применении ее к задаче о расстановке ферзей уточняется таким образом, что в ней не вычисляются и не хранятся явно множества Sk. Процесс поиска с возвращением удобно описывать в терминах обхода в глубину (см. ниже) дерева поиска решения, которое строится следующим образом. Корень дерева поиска решения (нулевой уровень) соответствует пустому вектору, являющемуся начальным частичным решением. Для любого k³1 вершины k - го уровня, являющиеся сыновьями некоторой вершины p, соответствуют частичным решениям
Дата добавления: 2014-01-04; Просмотров: 1227; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |