- •Лекция №6 Операции над списками. Способи подання бази знань
- •Способи подання бази знань
- •4.2.1. Представлення цілісних інформаційних елементів у вигляді фактів
- •4.2.2. Подання атрибутів у вигляді фактів
- •4.2.3. Представлення знань у вигляді списку структур
- •4.2.4. Подання у вигляді рекурсивних структур
- •Представление в виде двоичного дерева
Представление в виде двоичного дерева
Можно еще более усовершенствовать метод представления данных в виде рекурсивной структуры, если преобразовать структуру "рс" в двоичное дерево ("дд"). Это достигается путем введения одного дополнительного аргумента. Смысл использования двоичного дерева заключается в том, чтобы хранить базу данных в отсортированном виде. В приводимо ниже примере база данных отсортирована по атрибуту, описывающему-;
имя служащего. 1
Теперь в структуре будет шесть аргументов:
дд(Имя,Отд,Долж,Окл,Предыдущ,Последующ)
Переменная <( Предыдущ» описывает ветвь дерева, содержащую все целостные информационные элементы, стоящие (в соответствии с алфавитным порядком) перед текущим элементом. Переменная « Последующ » представляет ветвь, охватывающую все целостные информационные элементы, расположенные, согласно алфавиту, после данного элемента. Предположим, что целостный информационный элемент, содержащий все сведения о Нэнси, является самым верхним узлом дерева. Тогда двоичное дерево, отсортированное в алфавитном порядке по именам служащих, примет вид, изображенный на рис. 2.3.
Это можно записать следующим образом:
дд (петров ,200,начальник ,71000,
дд(иванов,100,оператор,20000,end,end),
дд (сидоров, 100,менеджер,715ОО,end,end))
Версия процедуры "один_циэ" для представления данных в виде двоичного дерева будет иметь вид:
% игнорировать верхний уровень двоичного дерева; вызвать процедуру "один_циэ_дд" для получения следующего целостного информационного элемента в соответствии со значением переменной « Предыдущ»:
один_циэ_дд(сл(Имя,Отд,Долж,Окл), дд (_,_,_,_, Предыдущ, Последующ))
:- один_циэ_дд (ел (Имя,ОтдДолж,Окл), Предыдущ).
% выдать целостный информационный элемент, расположенный на верхнем уровне двоичного дерева:
один_циэ_дд (ел (Имя,Отд,Долж,Окл),дд(Имя,Отд.Долж,Окл, _,_)).
% игнорировать верхний уровень двоичного дерева; вызвать процедуру "один_циэ_дд" для получения следующего целостного информационного элемента в соответствии со значением переменной « Последующ»:
один_циэ_дд (сл(Имя,Отд,Долж,Окл), дц (_,_.,_,-.Предыдущ, Последующ))
:- один_циэ_дд (ел (Имя,Отд,Долж,Окл), Последующ).
Теперь процедура "один_циэ_дд" определена, можно написать запрос, позволяющий найти всех служащих отдела 100. Вторым аргументом запроса является целиком вся база данных.
! ?- один_циэ_дд (сл(Имя,100Долж,Окл),
дд (петров,200,начальник ,71000,
дд (иванов,100,onepaтop,20000,end,end).
дд(сидоров,100,менеджер,71500, end,end)
)
)
Сравнение разных видов представления базы данных
Наиболее важным различием между описанными выше формами представления базы данных является то, что для доступа к данным в каждом случае требуется свой алгоритм. Говоря конкретно, при представлении базы данных в виде целостных информационных элементов, являющихся фактами, или при представлении атрибутов в виде фактов доступ к базе данных должен осуществляться при помощи алгоритма поиска с возвратом
(backtracking algorithm), а при использовании рекурсивных структур данных (в том числе, списков и двоичных деревьев) доступ должен реализовываться рекурсивным алгоритмом. Правила и -запросы, приведенные в настоящем разделе, служат простыми примерами этих алгоритмов. Представление в виде двоичного дерева имеет то преимущество, что время
поиска конкретной записи будет обычно меньшим, чем при иных представлениях. Ввиду того, что древовидная структура содержит данные в отсортированном виде, при поиске интересующей записи процедуре выборки понадобится просмотреть меньшее количество записей.
