Студопедия

КАТЕГОРИИ:


Архитектура-(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).

3.Взять первую вершину из списка отк и перенести
ее в список, называемый зак. Эту вершину назвать п.

4.Раскрыть вершину п, построив все непосредственно сле­
дующие за ней вершины. Поместить их (в произвольном по­
рядке) в начало списка отк и построить указатели, иду­
щие от них к вершине п.

5.Если одна из этих вершин целевая, то на выход выдать
решение, просматривая для этого соответствующие указатели,
в противном случае переходить к шагу 2. Соответствующая программа имеет вид.

/*Программа: поиск в глубину */

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
от вершины V1 до целевой, то Sol = [V I S1].

Эта формулировка представляется следующей программой.

/*Программа поиск в глубину 1 */




Поделиться с друзьями:


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


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



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




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