Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги из ГПНТБ / Папернов А.А. Методы упорядочения информации в цифровых системах

.pdf
Скачиваний:
16
Добавлен:
25.10.2023
Размер:
13 Mб
Скачать

§ 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).

 

 

§ 9.4. ПРЕОБРАЗОВАНИЕ

ВНУТРЕННИХ

ЦЕПОЧЕК ДЕРЕВА

353

 

 

 

 

 

 

 

 

 

Т а б л и ц а

9.6

1

0

1

2

3

4

5

6

7

8

9

10

п

 

0

1

2

4

7

12

20

33

54

88

143

232

^макс

0

1

3

7

15

31

63

127

255

511

1023

2047

1

 

12

 

13

 

14

 

 

15

 

16

 

тмин

 

376

 

609

 

986

 

1596

 

2583

^Чіакс

 

4095

 

8191

 

16383

 

32767

 

65535

В таблице

для сравнения

приведены

веса

правильно

заполненных деревьев с той же длиной пути до точек ро­

ста (/п м а к с ),

равные 211.

Решение

разностного уравнения (9.40), как известно,

можно представить в виде суммы общего решения урав­

нения без правой

части

 

 

 

 

 

 

 

тп

 

П)~т°

(/— 1) —т°

(/ —2) = 0

(9.42)

 

мин4 '

мин V

'

 

МИН V

'

х

'

и частного

решения

уравнения (9.40). Общее

решение

уравнения

(9.42)

ищем в виде

 

 

 

 

 

 

 

 

 

 

" С н

(/)=*<•

 

 

 

(9.43)

Подставляя

(9.43)

в

(9.42),

получим

алгебраическое

уравнение

х1 х1

1

 

А— 2

 

0 или

 

 

 

 

 

 

 

 

 

 

X — 1 -= 0.

 

(9.44)

Корнями

квадратного

уравнения

(9.44)

являются хІЛ =

= (1 ±

|/5)/2, а общим решением

 

уравнения (9.42)

 

 

 

 

 

(

\+Ѵ~Ь\1

 

, с

^

1 - / 5

(9.45)

 

 

А Д м и н — С і

\

2

У

1

~ 2 \ 2

 

 

 

 

 

Частное

решение

разностного

уравнения (9.40) равно

 

 

 

 

 

то

=

_ І

 

 

 

(9.46)

 

 

 

 

 

 

мин V '

 

'

 

 

 

 

а общее его решение

«мин (0 = С 1 [

0

.1. (9.47)

12 А. А. Папернов, В. Я. Подымет

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) нарушается в некотором

узле при за­

писи в дерево нового элемента только тогда, когда но­ вый элемент попадает на наиболее удаленную точку роста «длинной» ветви этого узла. Перестройка описан-

§

9.4. ПРЕОБРАЗОВАНИЕ

ВНУТРЕННИХ

ЦЕПОЧЕК ДЕРЕВА

355

ного

выше

типа, уменьшая

/ м а к с

«длинной» ветви

на

единицу и

увеличивая

Iт к с

«короткой» ветви, на еди­

ницу, выравнивает длины путей до наиболее удаленных точек роста в обеих ветвях, восстанавливая тем самым выполнение условия (9.51).

При записи в дерево нового элемента условие (9.51) может нарушиться в нескольких узлах по ходу поиска точки роста. Однако для восстановления выпол­ нения условия (9.51) во всех узлах дерева достаточно одной перестройки в узле, наиболее удаленном от вер­

шины дерева из числа всех узлов

с нарушением усло­

вия (9.51).

 

Выполнение или невыполнение

условия соотношения

длин путей (9.51) можно фиксировать и корректировать

при записи в дерево новых

элементов без

явной запи­

си в каждом узле значений

/ м а к с для обеих

ветвей. До­

статочно ограничиться записью в каждом узле двухраз­

рядного признака, одно

из

значений

которого — 00 —

указывает на равенство / ш к

с

в обеих ветвях, другое зна­

чение— 10 — указывает

на

то, что

/ м а к с

в левой

ветви

превышает Іилкс

в правой ветви на единицу; третье

зна­

чение— 01—указывает

на то, что / м а к с

в правой

ветви

превышает / м а к с

в левой ветви на единицу.

 

Увеличение

или сохранение / м а к с

после записи

в не­

которую ветвь дерева нового элемента может быть уста­

новлено только после завершения

поиска точки

роста,,

на которую записывается

новый

элемент. Список ж е

узлов дерева,

расположенных на

пути поиска, в

кото­

рых возможна

перестройка

и корректировка признаков,,

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

Вначале проверяется узел, содержащий точку роста,, в которую записался новый элемент. Если признак в узле имел значение 01 или 10, то ему присваивается но­ вое значение 00. Перестройка узла не производится. Если признак имел значение 00, то ему присваивается значение 01 или 10 в зависимости от того, по какому адресу, правому или левому, записался новый элементПосле этого зафиксированный в процессе поиска спи­ сок узлов начинает просматриваться с конца.

12*

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. ПРЕОБРАЗОВАНИЕ ВНУТРЕННИХ ЦЕПОЧЕК ДЕРЕВА

357

уменьшать, но даже увеличивать среднюю длину Е дере­ ве. Поясним это утверждение. Пусть длина пути от пе­ рестраиваемого узла дерева до самой удаленной точки этого узла равна /.

Рис. 9.11. К выводу соотношения между весом дерева и максимальиой длиной пути (уеловие соотношения длин пути).

Рис. 9.12. Соотношение весов при перестройке по соотношению длин,

tn\ , от которых зависит изменение средней длины пути в дереве в результате перестройки после проверки соот­ ношения длин.

Из рис. 9.12 видно, что минимальное значение т2 это минимальный вес допустимой (т. е. удовлетворяю­ щей условию соотношения длин) ветви с длиной пути до самой удаленной точки роста, равной (/—2). Макси­ мальное значение т2 равно весу правильно заполненной

ветви с длиной пути, равной (/—3), которая дополнена одним элементом в следующем ярусе, т. е. 2'~3 .

Минимальное значение т\—это минимальный вес допустимой ветви с длиной пути до самой удаленной точки, равной (/—3). Максимальное значение равно весу правильно заполненной ветви с длиной пути, равной (/—3), т. е. 2 / _ 3 — 1 . Пределы изменения весов т2 и tn'l для ряда значений / приводятся в табл. 9.7.

Минимальные значения

т [

и

т'2

взяты

из табл. 9.6.

Из табл. 9.7 видно, что

для

f > 7

в

момент

перестройки

может

оказаться, чіот'2

<m'J.

В

этих

случаях перест­

ройка

по соотношению

длин приводит

к

увеличению

358 ГЛ. 9. МЕТОДЫ ПЕРЕСТРОЙКИ ДВОИЧНЫХ ДЕРЕВЬЕВ

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

 

 

 

 

 

 

 

Т а б л и ц а 9.7

 

 

т \

 

т2

 

 

 

 

т2

1

мин.

макс.

мин.

макс.

 

мин.

макс.

мин.

макс.

 

 

 

значе­

значе­

значе­

значе­

 

значе­

значе­

значе­

значе­

 

ние

ние

ние

ние

 

ние

ние

ние

ние

3

0

0

1

1

10

33

127

54

128

4

1

1

2 .

2

11

54

255

88

256

5

2

3

4

4

12

88

511

143

512

6

4

7

7

8

13

143

1023

232

1024

7

7

15

12

16

14

232

2047

376

2048

8

12

31

20

32

15

376

4095

609

4096

9

20

63

33

64

16

609

8191

986

8192

9.4.6. Блок-схема алгоритма с проверкой соотноше­

ния

весов (рис. 9.13). Алгоритм оперирует управляющи­

ми словами, в состав каждого из которых входят три адреса: Ал, Лпр, Линф и вес т.

Алгоритм использует рабочие ячейки:

 

 

Лвершины — для записи

адреса

управляющего

сло­

ва узла, расположенного в вершине дерева,

 

 

Лнов — для

записи

адреса

управляющего

слова

уз­

ла, вновь включаемого в дерево,

 

 

 

Лтек — для

записи

адреса

управляющего

слова

уз­

ла, в котором надлежит выполнить

сравнение

признака

с признаком узла, вновь включаемого в дерево,

 

Лтек 1—для записи адреса управляющего слова уз­

ла, предпоследнего

по пути

поиска1 ),

 

 

Лтек 2 — для

записи

последнего

(третьего)

узла

це­

почки, подлежащей

перестройке,

 

 

 

Q — для записи

веса т\

той ветви предпоследнего по

пути поиска узла, которая направлена не по пути поиска.

Т — для записи признака,

указывающего, произошел

ли выход из предпоследнего

узла по левой (Г—0) или

*) В

случае

выявления необходимости перестройки в

дереве в

ячейках

Лтекі

и Лтек оказываются записанными адреса

первого

и второго узлов

перестраиваемой цепочки.

 

§ 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

для

корректировки

веса

этого

узла

Соседние файлы в папке книги из ГПНТБ