КАТЕГОРИИ: Архитектура-(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) |
Пример 5.3.3
Goal Clauses Predicates Domains Пример 5.3.2. Поиск в глубину и итеративное углубление Goal Clauses Predicates Domains Пример 5.3.1 /*Программа: поиск с возвратами */ s =symbol l= s* ap (l, l, l) eq (l, l) udob (l, l, l) preemn (s, l) gs(s) solve (l, l, l, l) sol sol:-solve ([s], [], [], P), write (“sol =”,P),nl. solve ([X|N], C, T, P):- C1= [X|C], gs(X), P= C1. solve ([X|N], C, T, P):- C1= [X|C], preemn (X, L), udob (C1, L, L1), udob (N, L1, L2), udob (T, L2, L3), eq(L3, []),udob ([X], C1,C2), udob ([X], N,N1), T1= T, solve (N1,C2,T1,P1), P=P1. solve ([X|N], C, T, P):- C1= [X|C], preemn (X, L), udob (C1, L, L1), udob (N, L1, L2), udob (T, L2, L3), ap(L3, [X|N], N1), T1=T, solve (N1,C1,T1,P1), P=P1. solve ([],C,T,P):- P= resh.net, write(P),nl. sol
Глубину вершины в корневом графе определим рекурсивно: глубина корня дерева равна нулю. Глубина любой последующей вершины равна единице плюс глубина вершины, которая непосредственно ей предшествует. Таким образом, вершиной, имеющей наибольшую глубину в дереве перебора, в данный момент служит та, которая должна в этот момент быть раскрыта. Стратегия поиска в глубину использует два списка вершин: отк (открыт- соответствует списку N в стратегии поиска с возвратами, реализован как стек) зак (закрыт- соответствует объединению списков C и T в стратегии поиска с возвратами) и определяется следующей последовательностью шагов: 1.Поместить начальную вершину в список, называемый отк. 2.Если список отк пуст, то на выход дается сигнал 3.Взять первую вершину из списка отк и перенести 4.Раскрыть вершину п, построив все непосредственно сле 5.Если одна из этих вершин целевая, то на выход выдать /*Программа: поиск в глубину */ s =symbol l= s* ap (l, l, l) eq (l, l) udob (l, l, l) preemn (s, l) gs(s) solve (l, l, l) /*Первый аргумент- список отк, второй- зак */ sol sol:-solve ([s], [], P), write (“sol =”,P),nl. solve ([X|L1], M, P):- gs(X), P= [X|M]. solve ([X|N], M, P):- M1= [X|M], preemn (X, L), udob (L1, L, L2), udob (M1, L2, L3), ap(L3, L1,L4), solve (L4,M1, P1), P=P1. solve ([],M,P):- P= resh.net, write(P),nl. sol
Если пространство состояний задачи является корневым деревом, то программа может быть упрощена, с учетом следующего. Чтобы найти путь решения Sol от заданной вершины S до некоторой целевой вершины, необходимо реализовать в программе следующие операции: ■ если S— целевая вершина, то Sol = [S]; ■ иначе, если существует вершина- преемник V1 вершины V, такая, что имеется путь S1 Эта формулировка представляется следующей программой. /*Программа поиск в глубину 1 */
Дата добавления: 2014-01-07; Просмотров: 255; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |