|
||||
|
Назад | Содержание| Вперёд Глава 10 УСОВЕРШЕНСТВОВА...Назад | Содержание| Вперёд Глава 10 УСОВЕРШЕНСТВОВАННЫЕ МЕТОДЫ ПРЕДСТАВЛЕНИЯ МНОЖЕСТВ ДЕРЕВЬЯМИ В данной главе мы рассмотримусовершенствованные методы представлениямножеств при помощи деревьев. Основная идеясостоит в том, чтобы поддерживатьсбалансированности или приближеннуюсбалансированность дерева, с тем чтобы избежатьвырождения его в список. Механизмы балансировкидеревьев гарантируют, даже в худшем случае,относительно быстрый доступ к элементам данных,хранящихся в дереве, при логарифмическом порядкевремени доступа. В этой главе изложено два такихмеханизма: двоично-троичные (кратко, 2-3) деревья иAVL-деревья. (Для изучения остальных главпонимание данной главы не обязательно.) 10. 1. Двоично - троичные справочники Двоичное дерево называют хорошосбалансированным, если оба его поддерева имеютпримерно одинаковую глубину (или размер) и самисбалансированы. Глубина сбалансированногодерева приближенно равна log n , где n -число вершин дерева. Время, необходимое длявычислений, производимых отношениями внутри,добавить и удалить наддвоичными справочниками, пропорциональноглубине дерева. Таким образом, в случае двоичныхсправочников это время имеет порядок log n.Логарифмический рост сложности алгоритма,проверяющего принадлежность элемента множеству,- это определенное достижение по сравнению сосписковым представлением, поскольку в последнемслучае мы имеем линейный рост сложности Рис. 10. 5. Некоторые из случаев работы отношения встав. (a) встав( в2( Д1, М, Д2), X, в2( НД1, М, Д2) ); (b) встав( в2( Д1, М, Д2), X, в3( НД1а, Мб, НД1б, М, Д2) ); (c) встав( в3( Д1, М2, Д2, М3, Д3), X, в2( НД1а, Мб, НД1б), М2, в2( Д2, М3, Д3) ). % Вставление элемента в 2-3 справочник доб23( Дер, X, Дер1) :- %Вставить Х в Дер, получить Дер1 встав( Дер, X, Дер1). % Дерево растет вширь доб23( Дер, X, в2( Д1, М2,Д2) ) :- встав( Дер, X, Д1, М2, Д2). %Дерево растет вглубь доб23( nil, X, л( Х) ). встав( л( А), X, л( А), X,л( Х) ) :- больше( X, А). встав( л( А), X, л( Х), А,л( А) ) :- больше( А, X). встав( в2( Д1, М, Д2), X,в2( НД1, М, Д2) ) :- больше( М, X), встав( Д1, X, НД1). встав( в2( Д1, М, Д2), Х,в3( НД1а, Мб, НД1б, М, Д2) ) :- больше( М, X), встав( Д1, X, НД1а, Мб, НД1б). встав( в2( Д1, М, Д2), X,в2( Д1, М, НД2) ) :- больше( X, М), встав( Д2, X, НД2). встав( в2( Д1, М, Д2), Х,в3( Д1, М, НД2а, Мб, НД2б) ) :- больше( X, М), встав( Д2, X, НД2а, Мб, НД2б). встав( в3( Д1, М2, Д2, М3,Д3), Х, в3( НД1, М2, Д2, М3, Д3) :- больше( М2, X), встав( Д1, X, НД1). встав( в3( Д1, М2, Д2, М3,Д3), X, в2( НД1а, Мб, НД1б), М2, в2( Д2, М3, Д3) ) :- больше( М2, X), встав( Д1, X, НД1а, Мб, НД1б). встав( в3( Д1, М2, Д2, М3,Д3), X, в3( Д1, М2, НД2, М3, Д3) ) :- больше( X, М2), больше( М3, X), встав( Д2, X, НД2). встав( в3( Д1, М2, Д2, М3,Д3), X, в2( Д1, М2, НД2а), Мб, в2( НД2б, М3, Д3) ) :- больше( X, М2), больше( М3, X), встав( Д2, X, НД2а, Мб, НД2б). встав( в3( Д1, М2, Д2, М3,Д3), X, в3( Д1, М2, Д2, М3, НД3) ) :- больше( X, М3), встав( Д3, X, НД3). встав( в3( Д1, М2, Д2, М3,Д3), X, в2( Д1, М2, Д2), М3, в2( НД3а, Мб, НД3б) ) :- больше( X, М3), встав( Д3, X, НД3а, Мб, НД3б). Рис. 10. 6. Вставлениеэлемента в 2-3 справочник. В этой программе предусмотрено, что попыткаповторного вставления элемента терпит неудачу. Программа для вставления нового элемента в 2-3справочник показана полностью на рис. 10.6. На рис.10.7 показана программа вывода на печать 2-3деревьев. Наша программа иногда выполняет лишниевозвраты. Так, если встав с тремяаргументами терпит неудачу, то вызываетсяпроцедура встав с пятью аргументами,которая часть работы делает повторно. Можноустранить источник неэффективности, если,например, переопределить встав как встав2( Дер, X,Деревья) где Деревья - список, состоящий либо изодного, либо из трех аргументов: Деревья = [ НовДер], есливстав( Дер, X, НовДер) Деревья = [ НДа, Мб, НДб], если встав( Дер, X, НДа,Мб, НДб) Теперь отношение доб23 можнопереопределить так: доб23( Д, X, Д1) :- встав( Д, X, Деревья), соединить( Деревья, Д1). Отношение соединить формирует однодерево Д1 из деревьев, находящихся в списке Деревья. Упражнения 10. 1. Определите отношение внутри( Эдем, Дер) для поиска элемента Элем в 2-3справочнике Дер. Посмотреть ответ 10. 2. Введите в программу рис.10.6 изменения для устранения лишних возвратов(определите отношения встав2 и соединить). % Отображение 2-3 справочников отобр(Д) :- 15 отобр( Д, 0). -- отобр( nil, _ ). 15 отобр( л(А), Н) :- -- tab( H), write( A), nl. 13 отобр( в2( Д1, М, Д2), Н):- -- H1 is H + 5 13 отобр( Д2, H1), -- tab( H), write( --), nl, 12 tab( H), write( M), nl, -- tab( H), write( --), nl, 12 отобр( Д1, H1). 10 отобр( в3( Д1, M2, Д2, М3,Д3), H) :- 10 H1 is H + 5 -- отобр( Д3, H1), 8 tab( H), write( --), nl, -- tab( H), write( M3), nl, 8 отобр( Д2, H1), -- tab( H), write( M2), nl, 7 tab( H), write( --), nl, -- отобр( Д1, H1). 7 -- (a) 5 -- 5 -- 4 -- 4 3 3 -- 1 (б) Рис. 10. 7. (а) Программа для отображения 2-3 справочника. (b) Справочник (см. рис. 10.2), отпечатанныйэтой программой. Назад | Содержание| Вперёд |
|
||
Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх |
||||
|