Заказать курсовые, контрольные, рефераты...
Образовательные работы на заказ. Недорого!

Реализация быстрого логического вывода в среде Prolog

РефератПомощь в написанииУзнать стоимостьмоей работы

Нения предполагает в среднем развертывание —-— вершин дерева поиска (список Y сканируется до первого появления искомого значения), где пх и пу — количество фактов в множествах X и Y соответственно. Для операции соединения развертывается пхпу вершин, поскольку соединение представляет собой декартово произведение с фильтрацией. Операции дополнения и фильтрации в языке SWRL являются простыми… Читать ещё >

Реализация быстрого логического вывода в среде Prolog (реферат, курсовая, диплом, контрольная)

Набор базовых операций реляционной алгебры включает в себя пересечение X n Y (INTERSECT), вычитание X — Y (DIFFERENCE), объединение XuY (UNION), соединение (JOIN), проекцию, дополнение (NOT) и фильтрацию (WHERE)'. Реализация над двумя списками X = {х} и Y = {у} операций пересечения, разности и объеди;

пхпу

нения предполагает в среднем развертывание —-— вершин дерева поиска (список Y сканируется до первого появления искомого значения), где пх и пу — количество фактов в множествах X и Y соответственно. Для операции соединения развертывается пхпу вершин, поскольку соединение представляет собой декартово произведение с фильтрацией. Операции дополнения и фильтрации в языке SWRL являются простыми, поскольку здесь не допускается вложенный поиск, как SUBSELECT в СУБД, и требуют развертывания только пх вершин.

Ниже приведен текст предиката intersection, входящего в состав библиотеки lists SWI-Prolog. Здесь и далее вместо множеств мы будем говорить о списках. Во-первых, список — это агрегат данных, с которым манипулирует Prolog, во-вторых, списки[1]

допускают повторяющиеся значения, сохранение которых неооходимо в некоторых операциях:

intersection ([],_, []).

intersection ([Х|Т], L, Intersect) memberchk (X, L),!,.

Intersect = [X|R], intersection (T, L, R). intersection ([_|T], L, R) intersection (T, L, R) .

ny

Предикат memberchk вызывает извлечение в среднем — эле;

менов списка Y для каждого элемента списка X, что и обусловливает низкую скорость работы данного предиката.

Отсортируем списки X = {д} и Y = {у} по возрастанию значений. В этом случае оба списка можно обрабатывать совместно, и дерево поиска будет состоять из пх + пу вершин. Таким образом, ожидаемое ускорение обусловлено переходом от квадратичной к линейной зависимости сложности поиска от числа фактов. Предикат нахождения пересечения отсортированных списков intersectSorted представлен ниже:

intersectSorted ([],_, []).

intersectSorted (_, [], []).

intersectSorted ([Y|Xs], [Y|Ys], [Y|XxY]).

intersectSorted (Xs, Ys, XxY),!. intersectSorted ([X|Xs], [Y|Ys], XxY) X>Y,.

intersectSorted ([X|Xs], Ys, XxY),!. intersectSorted ([_|Xs], [Y|Ys], XxY).

intersectSorted (Xs, [Y|Ys], XxY).

Похожим образом реализуется операция вычитания множеств X — YdifferenceSorted:

differenceSorted ([],_, []) :-!.

differenceSorted (R, [], R) :-!.

differenceSorted ([X|Xs], [X|Ys], XmY).

differenceSorted (Xs, [X|Ys], XmY),!.

differenceSorted ([X|Xs], [Y|Ys], [X|XmY]).

X.

differenceSorted ([X|Xs], Ys, XmY).

Операция объединения множеств состоит из суммы двух вычитаний множеств плюс их пересечение: Реализация быстрого логического вывода в среде Prolog.

т.е. требует пяти операций. Создание отдельного предиката unionSorted для операции объединения позволит сократить размерность данной задачи:

unionSorted ([], R, R) unionSorted (R, [], R).

unionSorted ([H|Xs], [H|Ys], [H|XuY]).

unionSorted (Xs, Ys, XuY),!. unionSorted ([X|Xs], [Y|Ys], [X|XuY]).

X.

unionSorted ([X|Xs], [Y|Ys], [Y|XuY]).

unionSorted ([X|Xs], Ys, XuY).

Наиболее часто в процессе интерпретации условий правил требуется соединение двух множеств кортежей (xv х2, хт) и (yv у2, …, ук) по совпадению значений переменных xi = у у В реляционной алгебре данной функции соответствует операция INNER JOIN. Количество развертываемых вершин дерева поиска для данной операции в случае наивного вывода составляет пхпу, а для соединения отсортированных списков.

Реализация быстрого логического вывода в среде Prolog.

где nxi и пу) — количество повторяющихся значений в первом и втором списках соответственно.

Если пренебречь возможностью повторения одних и тех же значений в обоих списках (nxi > 1 л nyj > 1), а также пренебречь случаями (nxi > 1 л nyj = 0) и (nxi = 0 л пу1 >1), то формулу (3.2) можно упростить:

Реализация быстрого логического вывода в среде Prolog.

где dx и dy — число дубликатов значений в списках X и Y соответственно.

Ниже представлен текст предиката, реализующего данную операцию над двумя множествами кортежей {(х^ х2)} и {(у{1 у2)} по совпадению xt = ух:

innerJoinSorted ([],_, Final, Final) :-!.

innerJoinSorted ([t (XI, X2) IXresidue], Y, In,.

Final).

inner Join Sort edl (t (XI, X2), Y, YtoLookUp, XY), append (In, XY, Out) ,.

innerJoinSorted (Xresidue, YtoLookUp, Out, Final). innerJoinSortedl (_, [], [], []) :-!.

innerJoinSortedl (t (X1/_X2)/ [t (Yl, Y2) lYresidue], [t (Yl, Y2) lYresidue], []) X1.

innerJoinSortedl (t (XI, X2), [t (Yl,_) lYresidue], YlookUp, XY) X1>Y1, !,.

innerJoinSortedl (t (XI, X2), Yresidue, YlookUp, XY) .

innerJoinSortedl (t (XI, X2), [t (Yl, Y2).

|Yresidue],.

[t (Yl, Y2) | YlookUp], [t (XI, X2, Y2) |XY]).

innerJoinSortedl (t (XI, X2), Yresidue, YlookUp, XY) .

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

Таблица 33

Сложность реализации операций реляционной алгебры на языке Prolog

Операция.

Оператор в СУБД.

Встроенный предикат в Visual Prolog

Сложность встроенного предиката.

Сложность быстрого предиката.

Пересечение In Y

INTERSECT

list: :

intersection.

пх + пу

Разность X- Y

MINUS

list: difference.

пх + пу

Объединение Xu Y=(XY) +.

+ (У-Х) + (ХпУ).

UNION

list: union.

пх + Пу

Соединение.

JOIN

Отсутствует.

пх + V.

+ dx+ dy

Таким образом, использование реляционных операций над отсортированными списками обеспечивает полиномиальную сложность логического вывода. К сожалению, этот метод не охватывает все возможные запросы к базе знаний. В частности, он работает эффективно только при соединении нескольких условий правила по равенству значений аргументов. Если аргументы нескольких условий сопоставляются по условиям «больше», «меньше» или «не равно», эффективность метода существенно снижается.

  • [1] См.: Дейт К.Дж.

    Введение

    в системы баз данных. 8-е изд. М.: Вильямс, 2006.

Показать весь текст
Заполнить форму текущей работой