Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция№6.docx
Скачиваний:
2
Добавлен:
20.08.2019
Размер:
68.48 Кб
Скачать

Представление в виде двоичного дерева

Можно еще более усовершенствовать метод представления данных в виде рекурсивной структуры, если преобразовать структуру "рс" в двоичное дерево ("дд"). Это достигается путем введения одного дополнительного аргумента. Смысл использования двоичного дерева заключается в том, чтобы хранить базу данных в отсортированном виде. В приводимо ниже примере база данных отсортирована по атрибуту, описывающему-;

имя служащего. 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), а при использовании рекурсивных структур данных (в том числе, списков и двоичных деревьев) доступ должен реализовываться рекурсивным алгоритмом. Правила и -запросы, приведенные в настоящем разделе, служат простыми примерами этих алгоритмов. Представление в виде двоичного дерева имеет то преимущество, что время

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

8