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

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

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

ГЛАВА 9

МЕТОДЫ ПЕРЕСТРОЙКИ ДВОИЧНЫХ ДЕРЕВЬЕВ

§9.1. Постановка вопроса о перестройке деревьев

впроцессе их формирования

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

рево его элементов

может привести

в конкретном дереве

к значительному

превышению среднего для

ансамбля

деревьев времени

поиска. Уместна

постановка

вопроса

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

Заметим, что в случае, когда в некотором дереве при­ знаки всех его элементов совпадают, форма дерева, по­ строенного в соответствии с описанными в главе 8 пра­ вилами, независимо от порядка поступления элементов остается неразветвленной в любом случае. Для того чтобы и в этом случае иметь возможность в результате перестройки сформировать разветвленное дерево, не­ обходимо разрешить размещение любого элемента В, признак которого совпадает с признаком элемента А, как на правой, так и на левой ветви элемента А.

§ 9.1.

ПОСТАНОВКА ВОПРОСА

О ПЕРЕСТРОЙКЕ

321

В связи

с тем, что при этом

несколько корректирует­

ся условие формирования дерева, должна быть скоррек­ тирована и процедура поиска в перестраивавшемся дере­ ве: поиск по совпадению должен выполняться по алго­ ритму поиска по интервалу, обе границы которого со­ впадают (п. 8.3.3). В соответствии с этим алгоритмом после обнаружения первого формуляра, удовлетворяю­ щего условию поиска, исследуются обе его ветви, по­ скольку формуляры, признаки которых удовлетворяют условию поиска, могут размещаться на обеих ветвях.

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

Допустим, что всем элементам, образующим полную ветвь некоторого узла дерева, присвоены номера в по­ рядке монотонного возрастания их признака. Если вес узла является нечетным числом 2k+\, то основное усло­ вие будет выполняться только тогда, когда в вершине узла будет помещаться ( £ + 1 ) - й элемент. Если полный вес узла является четным числом 2k, то основное усло­

вие выполняется,

когда

в вершине

узла

находится

либо k-й, либо (k+l)-u элемент.

 

 

Для того чтобы

полная

перестройка

была

возможна,

в каждом узле дерева должен быть записан признак симметрии s, позволяющий различить случаи:

1) нечетного веса, когда веса левой и правой ветвей равны друг другу (s = 00);

2) четного веса, когда вес левой ветви на единицу превышает вес правой ветви (5 = 10);

3) четного веса, когда вес правой ветви на единицу превышает вес левой ветви (5 = 01).

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

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

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

Рассмотрим любой из элементов дерева А , к полной ветви которого добавляется элемент В. Если вес элемен­ та А был нечетным, то после добавления элемента В он становится четным. При этом выполнение основного условия не нарушается. Признак элемента A s = 00 пре­ образуется в s = 10 или s = 01 в зависимости от того, попадает ли элемент В на левую или на правую ветвь элемента А . Это выясняется сразу же после проверки выполнения условия поиска в элементе А .

Если вес элемента А был четным, то после добавле­ ния элемента В он становится нечетным. При этом мо­

гут иметь место два варианта преобразования

призна­

ков s:

 

1) Если признак s элемента А был равен 10, а эле­

мент В попал на правую ветвь элемента А , или

признак

5 был равен 01, а элемент В попал на левую ветвь, то основное условие не нарушается, а признак s элемента А преобразуется в s = 00.

2) Если признак s элемента А был равен 10, а эле­ мент В попал на левую ветвь, или признак s был равен 01, а элемент В попал на правую ветвь, то основное усло­

вие нарушается. Для

восстановления симметрии

тре­

буется перестройка узла.

 

 

Содержание перестройки сводится к замене в верши­

не узла элемента А соседним к нему по порядку

(соот­

ветственно в зависимости от первоначального

значения

признака s в элементе А , левым или правым)

элемен­

том С.

 

 

 

Процесс перестройки узла А распадается на:

 

 

а) процесс поиска

соседнего с А элемента

С и ис­

ключения

его

с той позиции, которую он

занимал

раньше;

 

вершине узла элемента А элементом С;

б) замену в

в) записи элемента А в дерево, т. е. на ветвь элемен­

та С.

 

поиска элемента С и записи элемента А

В процессе

на ветвь элемента С во всех узлах на путях

к обоим

элементам

признаки должны корректироваться.

Попада-

§9.1. ПОСТАНОВКА ВОПРОСА О ПЕРЕСТРОЙКЕ

323

ние на левую (правую) ветвь в процессе

поиска

элемен­

та С, подлежащего исключению с позиции,

занимавшейся

им раньше, изменяет признак s так же, как и попадание на правую (левую) ветвь в процессе записи нового элемента.

Признак s в узле, подлежащем последующей пере­ стройке, заранее может быть установлен в 00.

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

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

Информация об этих узлах должна

быть добавлена

к списку. Исчерпание

списка узлов, подлежащих

пере­

стройке, может служить признаком завершения

всей

процедуры

перестройки

дерева.

 

 

Объем

перестроек,

которые могут

потребоваться,

виден из примера, изображенного на рис. 9.1. Каждый узел дерева здесь обозначен порядковым номером эле­ мента в упорядоченном списке. Дерево рис. 9.1,а сфор­ мировалось после записи в дерево, состоящее из элемен­ тов 1—14, все узлы которого удовлетворяли основному условию, нового элемента 15. При этом выявилась необ­ ходимость перестройки только одного узла, в вершине дерева.

После перестройки, содержанием которой явилась замена элемента 7 в вершине дерева соседним эле­ ментом 8 и записи элемента 7 на ветвь элемента 5, вы­ явилась необходимость перестройки еще двух узлов во втором ярусе дерева (рис. 9.1,6). После перестройки этих узлов выявилась необходимость перестройки еще четырех узлов в третьем ярусе дерева (рис. 9.1,в). Лишь после перестройки этих четырех узлов не выявилось необходи­ мости в новых перестройках и процедура перестройки оказалась полностью законченной (рис. 9.1,г). Таким образом, полная перестройка дерева свелась к перест­ ройке семи его узлов.

Н *

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

Сложность и трудоемкость полной перестройки де­ ревьев естественно ставит вопрос об использовании дру­ гих, более простых алгоритмов перестройки, обеспечи-

Рис. 9.1. Пример полной перестройки дерева:

а) исходное дерево; б) дерево после перестройка узла в

вершине; в) дерево

после перестройки двух узлов во 2-м

ярусе;

г) дерево

после перестройки

четырех узлов

в 3-м

ярусе.

 

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

§ 9.2. Метод перестройки неполных узлов дерева

9.2.1. Алгоритм метода. Алгоритм перестройки дерева может быть упрощен в наибольшей степени в случае, если перестройке подвергаются только неполные узлы с весом т > 2 . Конфигурация узлов, подлежащих пере-

§ 9.2. ПЕРЕСТРОЙКА НЕПОЛНЫХ УЗЛОВ ДЕРЕВА

325

стройке при указанном ограничении, с точностью до сим­ метрии изображена на рис. 9.2,а и 9.3,а. Конфигурация этих же узлов после перестройки изображена соответст­ венно на рис. 9.2,6 и 9.3,6".

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

а

Рис. 9.2.

Перестройка

непол-

Рис. 9.3. Перестройка

неполных

ных

узлов (случай

1).

узлов (случай

2).

Алгоритм перестройки неполных узлов дерева значи­ тельно проще алгоритма полной перестройки дерева, описанного в § 9.1, по следующим основным причинам:

а) при записи каждого нового элемента в дерево пе­ рестройке подлежит не больше одного узла;

б) способ обнаружения узлов, подлежащих пере­

стройке,

является несложным

и

не требует включения

в состав

служебной информации,

которую надо хранить

в узлах, никаких специальных

признаков.

Блок-схема алгоритма перестройки неполных узлов в дереве изображена на рис. 9.4.

Функции, выполняемые блоками /—3, не отличаются от функций, выполняемых аналогичными блоками при записи в дерево нового элемента без перестройки (рис. 8.5). В зависимости от результата проверки в блоке 3 осуществляется переход на одну из двух симметричных

Лтек :=АX вершины Р

Переход по А текm

©

Л тек;-Ал [Л тек]

Атек\:=Атен

Конец

/тек! .-=Лтек

 

в:=Аинф [Лтек]

<7.'»Линф[Лтек]

 

Лтек:-Лл[Лтек]

 

Лтек--=Лпр [Лтек]

 

Переходпо Amm

 

Переход по Атѵ,

Лтек.--Лпр[4тек

Т

©

Аииф [Л тек |] :=Л инф [Л тек]

Линф [Лтек] : = с

Лпр [Лтекі].-=Лтек Лл[Лтек1] .-M нов

Конец

4инф[Лтек|] .'=Линф [Лнов] 4инф[Лнов].'=с А пр [Л тек і] :=Л нов

Конец

 

©

4инф [Лтеш] :-Линф[Лнов]

Л инт [Л теи)].'=Линф[Лгпск]

Линф[Лнав] .--г

Л инф [Л тек] .•

Лпр [Лтек!]:=Лнов

/л [Лтекі] .-»ЛноВ

Ал [Лтекі]-'=Лтек

 

I

Конец

Конец

РИС. 9.4. Блок-схема алгоритма записи в дерево нового элемента с перестройкой неполных узлов.

-1

3

га

н

О

£з

S

a

M •о m

о

ч

тэ

О

S

s

И

о

s

к

X

J3

И

•а

га

ю

сг

И

И

§ 9.2. ПЕРЕСТРОЙКА НЕПОЛНЫХ УЗЛОВ ДЕРЕВА

327

ветвей, состоящих соответственно из блоков 4'12г и 4"12". Если блок 4 обнаружит, что проверяемый адрес пуст, то запись элемента осуществляется без перестройки дерева. Если проверяемый блоком 4 адрес оказывается не пустым, то блок 6 проверяет второй адрес и в случае его пустоты осуществляется переход к блокам 8—12, не­ посредственно выполняющим перестройку узла. Блоками 8 и 9 осуществляется запоминание адреса узла, подле­ жащего перестройке Атек, и адреса исходящей из него информации. Блок 10 сравнивает признаки нового эле­ мента и элемента, размещенного на ветви перестраивае­ мого узла. Если адреса, исходящие из неполного узла и из элемента, размещенного на ветви неполного узла, являются оба правыми или оба левыми, то выполняется блок 11. Он осуществляет перестройку неполного узла а (рис. 9.2,й) путем передачи в него из узла b адреса информации. Управляющее слово, в котором ранее раз­ мещался адрес информации Ь, освобождается и исполь­ зуется для записи первоначального адреса информации из перестраиваемого узла а. Два слова связи перестраи­ ваемого узла направляются к элементам а и с.

Если из адресов, один из которых исходит из пере­ страиваемого узла а, а второй из размещенного на его ветви элемента Ь, один является правым, а второй — левым (рис. 9.3,а), то выполняется блок 12. В вершину перестраиваемого узла помещается записываемый в дере­ во элемент с. Освободившееся управляющее слово нового элемента используется для записи в него адреса информации из перестраиваемого узла. Одно из управ­ ляющих слов в перестраиваемом узле сохраняется преж­ ним, а второму присваивается значение записываемого в дерево элемента.

9.2.2. Средняя длина поиска в дереве с перестройкой

неполных узлов. Для расчета средней длины поиска нам понадобится предварительно определить ожидаемую долю полных (индекс П), неполных (индекс Н) и кон­ цевых узлов среди всех узлов дерева. Среди концевых узлов мы будем отдельно учитывать концевые узлы, ис­ ходящие из полных узлов (индекс КП) , и концевые узлы, исходящие из неполных узлов (индекг КН) .

Перестройка неполного узла выполняется только пос­ ле записи нового элемента на узел с индексом КН.

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

При записи в дерево, состоящее из я элементов, ново­ го, т. е. (я+1) - го, элемента общее количество узлов уве­ личивается на единицу, а количество узлов разного типа изменяется в соответствии с табл. 9.1, где учтены харак­ тер точки роста, на которую попадает новый элемент, и перестройка неполного узла после записи нового элемен­

та на узел

с индексом

КН.

 

 

Дерево

из я элементов имеет я + 1

точку роста,

откуда

вытекает

соотношение,

связывающее

количество

узлов

разного типа в дереве

 

 

 

 

 

п„ + 2

я к п

+ 2 я к н = я +

1.

(9.1)

Считая запись нового элемента на любую точку роста равновероятной, имеем для вероятностей записи нового элемента на узлы определенного типа:

Рн

(9.2а)

п -\- 1

п +

(9.26)

1

п +

(9.2в)

1

Из табл. 9.1 с учетом соотношений (9.1)| и (9.2) нетруд­

но определить математические ожидания изменения ко­

личества

узлов

разного типа

после записи

в дерево

из я

 

 

 

 

 

Т а б л и ц а

9.1

 

 

 

Изменение количества узлов

различного

 

 

 

 

типа при записи нового элемента

 

 

 

 

п

H

кп

кн

Запись

на

неполный

узел

 

 

 

 

 

 

(Н)

+ 1

— 1

+ 2

—1

Запись на концевой узел, свя­

 

 

 

 

занный

с полным узлом

 

—1

 

 

 

 

(КП)

0

+ 1

+ 1

Запись на концевой узел, свя­

 

 

 

 

занный

с

неполным узлом

 

 

 

 

 

 

(КН)

+ 1

—1

+ 2

—1

§ 9.2. ПЕРЕСТРОЙКА НЕПОЛНЫХ УЗЛОВ ДЕРЕВА

329

элементов нового (п - Н) - го элемента. Они определяются следующими выражениями:

/ И ( Л / г п ) ^ р н + р к „ , =

"Н + 2ВКН

= 1 _

^

к п

 

( 9 - 3 а )

 

 

 

п + 1

 

 

п +

1

 

 

 

 

 

 

 

 

4

пк

1 ,

M (А Л н ) = Р к п ~ р н - рк „ = 2 " к , , - « н - 2 п ,

 

 

 

 

 

 

(9.36)

Л1 (А я к п ) = 2 р„ — р к п + 2 р к п

n +

1

 

 

 

=

 

 

 

 

 

 

= 2

~ 2

" к п

+ 4

— 2

 

6 п к г ,

(9.3в)

 

 

 

n +

1

 

 

п+

1

 

 

M Л к н ) =

УМ (А л„) =

——~

1.

 

(9.3г)

 

 

 

 

 

и + 1

 

 

 

 

Формулы (9.2) и (9.3) используют в качестве аргу­

ментов

количества узлов

разного

типа: пн,

пкп, пкн.

Ес­

ли п„,

пки, пкп характеризуют

некоторое конкретное

дере­

во, то и результаты вычислений по формулам (9.2) и

(9.3)

относятся к этому конкретному дереву. Если пн, пкп,

1\А

рассматривать как средние значения или математические ожидания количеств узлов соответствующего типа, то результаты вычислений по формулам (9.2) и (9.3) от­ носятся ко всему ансамблю деревьев, состоящих из n элементов, с учетом вероятности формирования де­ ревьев разной конфигурации. В дальнейшем нас, как правило, будут интересовать вероятностные характери­ стики ансамбля деревьев, и поэтому там, где специально не оговаривается противное, мы под количествами узлов разного типа будем понимать их математические ожида­ ния. Зависимость математического ожидания количест­ ва узлов разного типа и их приращения при записи в де­ рево нового элемента, а также вероятности записи ново­

го элемента на точки роста разного типа от веса дерева

n

показана в табл. 9.2, заполненной

по формулам (9.2)

и

(9.3).

 

 

 

 

 

 

Из

табл. 9.2

видно,

что, начиная с п — 6,

математиче­

ские

ожидания

Attn,

A°n> ^пкю

АпК | | и

вероятности

Рн, Ркп, Ркн стабилизируются.

 

 

 

Покажем, что эти значения математических ожиданий

и вероятностей

сохраняются и при больших

п.

 

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