Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab1_1hse.doc
Скачиваний:
5
Добавлен:
08.02.2015
Размер:
102.5 Кб
Скачать

Самостоятельная часть работы

  • Составьте протокол работы правила memberс какой-нибудь целью, например,member(c, [a,b,c,d]) .

  • Введите транзитивное ребро, убедитесь, что программа отыскивает все альтернативные варианты пути. Что происходит со списком посещенных вершин при поиске с участием транзитивных ребер?

Задание №1.3. Поиск пути в неориентированном графе.

Примером подобной постановки задачи может служить поиск различных вариантов маршрутов между двумя заданными пунктами на карте дорог. Рассмотрим неориентированный граф и соответствующий список фактов.

x

edge(y,z).

edge(y,x).

y

u

edge(y,v).

v

edge(z,v).

z

edge(x,v).

edge(x,u).

edge(v,u).

В неориентированном (циклическом по природе) графе отношения между вершинами симметричны, т.е. если из вершины x можно попасть в v, то и из v можно попасть в x.

Расширять вдвое список фактов симметричными фактами не самое хорошее решение. Лучше дополнить предыдущую программу правилом con, устанавливающим симметрию отношений связанных вершин:

con(A,B):-edge(A,B).

сon(A,B):-edge(B,A).

Правило con заменит собой правило edge в предыдущей программе.

Самостоятельная часть работы

  • Введите третьим аргументом в факты edgeвеса ребер. Измените программу таким образом, чтобы она выводила суммарный вес каждого из найденных альтернативных путей. Если не справитесь самостоятельно, объясните работу программы 1_3_mod.pro.

Задание №1.4. Поиск в псевдо бинарном дереве.

Псевдо бинарное дерево не является, в отличие от настоящего бинарного дерева, рекурсивной структурой. Его можно представить в виде совокупности фактов-предикатов с тремя аргументами, например, tree(X,L,R), где X - корневая вершина дерева (поддерева), L,R - поддерживающие её левая и правая вершины, являющиеся в свою очередь корневыми вершинами для нижележащих поддеревьев. Таким образом, псевдо бинарное дерево описано не как единая структура, а как набор фактов. Терминальные узлы отличаются тем, что L и R -пустые поддеревья. Их можно обозначить одним символом, например, v (void - пустой). Псевдо бинарное сбалансированное дерево с 15-ю вершинами потребует для своего отображения 7 фактов для внутренних вершин, и 8 фактов для терминальных вершин. Оно не поддерживает функцию вставки или удаления вершины дерева, как это делает рекурсивная структура, но поддерживает поиск заданной вершины или ускоренный поиск в случае индексации вершин (задание 1.5):

tree(a,b,c). tree(i,v,v).

tree(b,d,e). tree(h,v,v).

tree(c,f,g). tree(p,v,v).

tree(d,i,h). tree(n,v,v).

tree(e,p,n). tree(m,v,v).

tree(f,m,k). tree(k,v,v).

tree(g,l,s). tree(l,v,v).

tree(s,v,v).

Простейшей задачей является прямой поиск заданной вершины (Y) в дереве, начинающемся в вершине X (необязательно корневой). Рекурсивное правило поиска состоит из трёх предложений:

treemember(X, X):- tree(X,_,_).

treemember(X, Y):- tree(X, L,_), treemember(L, Y).

treemember(X, Y):- tree(X,_,R), treemember(R, Y).

Первое предложение - условие завершения рекурсии (вершина Xтождественно принадлежит дереву, начинающемуся отX). Второе и третье - рекурсивный поиск Y соответственно в левом и правом поддеревьях. Целевой предикат, например, treemember(a,i) приведёт к ответу «Да», если путь есть. Тот же предикат с аргументами (b,f) приведёт к ответу «Нет». Изобразите дерево, воспользовавшись приведенным списком фактов, и на примере написания протокола убедиться, что данное правило реализует метод прямого поиска и приводит к обходу части дерева в глубину. Поиск в бинарном дереве с помощью приведенных фактов и правил не дает преимуществ, в сравнении с представлением дерева фактамиedgeи правиломpathиз Задания 1.1. Преимущество можно получить, если немного изменить правило. Идея состоит в том, чтобы при каждом вызове второго предложения, которое будет реализовать обход дерева в глубину по левой ветви, проверять, не является ли соответствующая ей правая вершина целевой. Таким образом, это некоторая комбинация поиска в глубину и в ширину.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]