
книги из ГПНТБ / Папернов А.А. Методы упорядочения информации в цифровых системах
.pdf§ 9.4. ПРЕОБРАЗОВАНИЕ ВНУТРЕННИХ ЦЕПОЧЕК ДЕРЕВА |
351 |
|
ветви, то веса |
т\ и т'2 могут как увеличиваться, |
так и |
уменьшаться, |
а нарушение условия (9.39) может |
либо |
устраниться, либо не устраниться. В случае продолжаю щегося нарушения условия (9.39) для новой перестрой ки назначается цепочка из элементов с, a, d. Неустраняющееся нарушение условия (9.39) можно трактовать как признак целесообразности выделения для перестройки цепочки, содержащей больше чем три элемента. Тем са мым длина перестраиваемой цепочки перестает быть жестко фиксированной и определяется автоматически в процессе самой перестройки дерева.
После перестройки некоторой цепочки вес одной из ветвей ее вершины увеличивается (до m А -\-тв вместо
ГПА |
при перестройке цепочки типа рис. 9.6 или до ГПА + |
+ |
/Пс вместо mА при перестройке цепочки типа рис. 9.7). |
Из-за этого в цепочке, начинающейся с элемента, не посредственно предшествующего по пути поиска пере страивавшейся цепочке, условие (9.39), выполнявшееся до перестройки, может нарушиться. Для устранения та кого нарушения требуется дополнительная перестройка. Однако алгоритм построения дерева можно упростить, если эту дополнительную перестройку выполнять не не медленно, а только после повторного прохождения соот ветствующей цепочки при записи в дерево какого-либо нового элемента. При этом также уменьшается общее количество перестроек, так как с некоторой вероятно стью нарушение условия (9.39) может устраниться и без перестройки дерева.
9.4.3. Максимальная длина пути поиска в деревьях с проверкой соотношения весов. Характерной особенно стью перестроек рассматриваемого типа является лога рифмическая зависимость от веса дерева не только сред ней длины пути поиска, но и длины пути поиска до наи более удаленной точки роста в дереве с самой неблаго приятной конфигурацией.
Поясним это. Вместо максимальной длины пути до
точки роста / м а к с ( о т ) |
при заданном |
весе дерева |
m будем |
||
искать минимальный |
вес дерева mм и н |
(/) |
при |
заданной |
|
длине пути до наиболее удаленной точки роста I. |
|||||
Выделим цепочку |
из трех элементов, |
начинающуюся |
|||
с вершины дерева и расположенную |
в |
направлении к |
|||
наиболее удаленной |
точке роста |
(рис. 9.10). |
|
352 ГЛ. 9. МЕТОДЫ ПЕРЕСТРОЙКИ двоичных ДЕРЕВЬЕВ
Пусть наиболее удаленная точка роста расположена в ветви А . Поскольку условие (9.39) для вершины дере
ва выполняется, |
ветвь С |
имеет |
вес |
не меньший, чем |
ветвь А , т. е. не |
меньший, |
чем |
ттт |
(/—2). В дереве, |
Рис. 9.10. К выводу соотношения между весом дерева и максималь ной длиной пути (условие соотношения весов).
которое при заданном / имеет вес наименьший из возмож ных, ветвь С имеет вес, точно равный т м и н (/—2). В ре зультате, как видно из рис. 9.10, имеет место соотноше ние
т м и н (0 = т т н {1-Х) Л- тииа (I - 2) + 1. (9.40)
Разностное уравнение (9.40) вместе с начальными ус ловиями
т м и н ( 0 ) = |
0, |
(9.41а) |
т м и н ( 1 ) = |
1 , |
(9.416) |
позволяет составить таблицу |
тшт |
для ряда значений / |
(табл. 9.6). |
|
|
354 ГЛ. 9. МЕТОДЫ ПЕРЕСТРОЙКИ ДВОИЧНЫХ ДЕРЕВЬЕВ
Вычислив по начальным условиям
«мин( 0) = 0, m M l , „ ( l ) = l
постоянные С\ и С2 и подставив их в (9.47), получим
И . „ ( 0 ^ ( . ^ ) ( і ± р ) ' Н ( . - ^ ) х
X ( ± z l l 5 y _ 1 — 1,17 . 1,62' —0,17 • ( —0,62)'—1 . (9.48)
При оценке ттт (I) член 0,17 (—0,62)1 , представляющий собой убывающую функцию от /, может быть отброшен.
Следовательно,
/ ~ І о е і , 6 2 |
т«™ + 1 |
= 1,44 log, (т М И І І |
+ |
1) - 0,242 . |
(9.49) |
||
|
1 , 1 / |
|
|
|
|
|
|
Естественно, |
что |
формулу |
(9.49) |
можно переписать в |
|||
виде |
|
|
|
|
|
|
|
Сакс И |
= |
1Д4 log2 |
(m + 1) - |
0,242, |
(9.50) |
показывающем, что длина пути до наиболее удаленной точки роста в дереве наихудшей конфигурации на 44% больше длины пути поиска в правильно заполненном дереве.
9.4.4. Условие соотношения длин путей (Г. М. Адель- сона-Вельского и Е. М. Ландиса). Каждая ветвь дерева характеризуется длиной пути / м а к с от вершины ветви до самой удаленной из расположенных на этой ветви точек роста. Условием, налагаемым на дерево, является вы полнение неравенства
|
|
|
I (/макс)пр — (^макс)л | < 2 |
|
(9.51) |
во всех узлах дерева. |
|
|
|||
|
Условие (9.51) будем называть условием |
соотноше |
|||
ния |
длин |
путей. Оно означает, что в каждом |
узле дли |
||
ны |
путей |
до наиболее удаленных точек роста |
в правой |
||
и левой |
ветвях |
должны отличаться друг |
от |
друга не |
|
больше, чем на |
единицу. |
|
|
||
|
Условие (9.51) нарушается в некотором |
узле при за |
писи в дерево нового элемента только тогда, когда но вый элемент попадает на наиболее удаленную точку роста «длинной» ветви этого узла. Перестройка описан-
356 ГЛ. 9. МЕТОДЫ ПЕРЕСТРОЙКИ ДВОИЧНЫХ ДЕРЕВЬЕВ
Если в каком-то элементе списка признак имел зна чение 01 или 10, а новый элемент попал на короткую ветвь этого узла, то значение признака заменяется на 00, после чего дальнейший просмотр списка прекращает ся, и перестройка не производится. Если признак имел значение 00, то ему присваивается новое значение", рав ное 01 или 10 в зависимости от того, на правую или ле вую ветвь этого узла записался новый элемент, после чего продолжается дальнейший просмотр списка узлов. Если признак имел значение 01 или 10, а новый элемент попал на длинную ветвь, то назначается перестройка цепочки из трех узлов, начинающейся с рассматривае мого узла и продолжающейся в направлении поиска. Адреса всех перестраиваемых узлов записаны в зафик сированном списке. После перестройки признаку в вер шине перестроенной ветви присваивается значение 00 и
дальнейший просмотр |
списка |
зафиксированных |
узлов |
||
прекращается. |
Таким |
образом, |
узлы, предшествующие |
||
на |
пути поиска |
узлам |
с признаками 01 или 10, можно |
||
не |
фиксировать. Это |
значит, что информацию |
об узле |
с признаком 01 или 10 можно при поиске всегда запи сывать в начало списка, вытесняя старое содержимое. Список зафиксированных узлов будет содержать тогда только один узел с признаком 01 или 10 и любое коли чество узлов с признаком 00.
Определим максимальную длину пути до точки ро ста в дереве, сформированном в соответствии с алгорит мом перестройки по условию соотношения длин путей.
Пусть тшш(1) — минимальный вес дерева, удовлет воряющего условию (9.51) при длине пути до наиболее
удаленной точки роста, |
равной |
/. Из |
рис. 9.11 |
непосред |
||
ственно |
видно: тшт (/) = |
т м и н |
(1 — 1) |
+ ттш |
(/ — 2) + |
1, |
т. е . т м и н |
(/) удовлетворяет тому |
же условию (9.40), что |
и |
при перестройке по соотношению весов. Отсюда следует, что ограничения, накладываемые на максимальную длину пути (9.50) при поиске по соотношению длин путей и по иске по соотношению весов, оказываются одинаковыми.
9.4.5. Средняя длина поиска при проверке соотноше ния длин. Средняя длина поиска в случае проверки со отношения длин и соотношения весов оказывается раз личной. Это объясняется тем, что некоторые перестрой ки при проверке соотношения длин могут не только не
§ 9.4. ПРЕОБРАЗОВАНИЕ ВНУТРЕННИХ ЦЕПОЧЕК ДЕРЕВА |
359 |
п о п р а в о й (Т=\) ветви . Н и ж е п р и в о д я т с я п о я с н е н и я л и ш ь к н е к о т о р ы м б л о к а м а л г о р и т м а . Б л о к 1 п р и с в а и в а е т Л т е к и Q и с х о д н ы е з н а ч е н и я . Б л о к 2, н а р я д у с Пе-
Лтек ßepuiuHbi
Рис. 9.13. Блок-схема алгоритма |
перестройки дерева по соотноше |
нию |
весов. |
р е х о д о м п о А т е к , к о р р е к т и р у е т в е с л ю б о г о |
у з л а , в к о т о |
|
рый п р и в е л о н а п р а в л е н и е |
п о и с к а . Б л о к и |
4 vi 5 п у т е м |
п р о в е р к и а д р е с о в в ы я в л я ю т , не д о с т и г н у т а л и на п у т и
360 ГЛ. 9. МЕТОДЫ ПЕРЕСТРОЙКИ ДВОИЧНЫХ ДЕРЕВЬЕВ
поиска точка роста. Если она достигнута, то выполняет ся заключительный блок 6 или 7, записывающий в де рево новый элемент. В противном случае блок 5 или 9 проверяет, не ожидается ли после записи в дерево но вого элемента нарушения соотношения весов. Если нару шение соотношения весов не ожидается, то выполняется блок 10 или И, корректирующий информацию в рабочих
ячейках Q, Т, Лтек/ и подготавливающий |
дальнейшее |
|||
продвижение по дереву. Если нарушение |
соотношения |
|||
весов |
ожидается, |
то выявляется |
тип |
перестраи |
ваемой цепочки, после чего управление |
передается |
|||
одному |
из блоков |
перестройки (блоки |
16, 17, 18, 19). Во |
избежание загромождения блок-схемы, детальное содер жание блоков 16—19 в ней не раскрывается. Оно сво дится к перестановке адресов и корректировке весов в соответствии с табл. 9.4 и 9.5.
В частности, блок 19, преобразующий цепочку с дву
мя правыми |
адресами, имеет |
вид |
(р — рабочая |
ячейка) |
||||
m [Лтек] : = |
|
т[Лл[Лгек1]]+ m [Лл[Лтек]] + 1; |
|
|
||||
р : = Ллі; Ллі : = Лпрі; Лпрі : =- Лпр2; Лпр2 : = Лл2; |
||||||||
Лл2 : = р; |
|
|
|
|
|
|
|
|
р: = |
Линфі; |
Линфі : = Линф2; Линф2 : = р. |
|
|
||||
Блок 17, преобразующий цепочку с одним правым и |
||||||||
вторым левым адресом, имеет вид |
|
|
|
|
||||
m [Лтек] : = |
m [Лл[Лтек 1 ]] + |
m [Лл[ЛтекЗ]] + |
1; |
|
||||
т[Лтек2] : = |
т[Лпр[Лтек]] + |
т[Лпр[ЛтекЗ]] + 1 ; |
|
|||||
р: = |
Ллі; |
Ллі : = Л п р 1 ; Лпрі : = |
Лл2; Лл2 : = р; |
|||||
р : = |
Лпр2; |
Лпр2 : = ЛлЗ; ЛлЗ : = ЛпрЗ; ЛпрЗ : = |
р; |
|||||
р : = Линфі; Линфі : = ЛинфЗ; ЛинфЗ : =Линф2; |
|
|||||||
Линф2 : = |
р. |
|
|
|
|
|
||
Программы |
блоков 16 и 18 могут быть |
составлены |
||||||
аналогично. |
|
|
|
|
|
|
|
|
В случае |
выявления цепочек |
типа |
рис. |
9.7 |
осуще |
|||
ствляется переход к группе блоков 20,22 |
или 21, |
23, про |
веряющих, по какой ветви перестроенной цепочки дол жен быть направлен новый элемент. Блоки 24 и 26 при сваивают весу т\ значение веса одного из двух узлов перестроенной цепочки, не расположенного в ее верши
не. Блок |
25 |
присваивает |
Лтек |
адрес |
второго из |
этих |
|||
узлов |
(в |
тех |
случаях, когда в |
Лтек уже хранится |
этот |
||||
адрес, |
содержимое |
Лтек |
не |
изменяется) |
и передает |
||||
управление блоку 2 |
для |
корректировки |
веса |
этого |
узла |