
книги из ГПНТБ / Папернов А.А. Методы упорядочения информации в цифровых системах
.pdf340 ГЛ. 9. МЕТОДЫ ПЕРЕСТРОЙКИ ДВОИЧНЫХ ДЕРЕВЬЕВ
С учетом увеличения средней длины поиска без пе рестройки в среднем на 2 / ( п + 1 ) единицы (см. (8.10)) и уменьшения ее за счет возможной перестройки (9.29)| получим для математического ожидания изменения сред ней длины поиска после записи в дерево п-то элемента формулу
|
|
|
|
2* |
7 |
|
|
k |
|
|
|
|
|
|
-1 |
|
|
|
|
|
|
М(Мср) |
= |
|
|
(=1 |
|
|
|
|
|
|
1 |
|
2k |
— 1 |
|
|
|
|
|
||
|
п + |
|
|
|
|
|
|
|||
|
|
|
|
y |
|
_ |
i |
_ |
|
|
|
|
|
|
t'=2 |
|
|
|
|
|
|
|
|
|
|
|
2* |
|
|
|
|
|
|
|
|
|
|
—1 |
|
|
|
|
|
|
|
|
|
|
1=2 |
|
|
|
|
|
|
|
|
|
|
(=2 |
+ |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
П + 1 2 — |
1 |
(9.30) |
|||
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
i=2 |
|
|
Для частных значений k формула |
(9.30) дает |
резуль |
||||||||
таты, приводимые ниже. |
|
|
|
|
|
|
|
|||
Для £ = 2 |
|
|
|
|
|
|
|
|
|
|
М ( Д / С Р ) |
1 |
1 _\__ |
1 |
|
12 |
я + |
1 |
= |
1,714 п + 1 |
|
п + |
|
|
7 |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(9.31а) |
что совпадает |
с результатом, |
полученным |
в § 9.2 |
(9.12). |
||||||
Для k — 3 |
|
|
|
|
|
|
|
|
|
|
M (Л / с р ) = |
п + 1 |
|
, |
= |
1,642 |
я + 1 |
(9.316) |
|||
|
|
|
7 |
|
|
|
|
|
|
|
|
|
|
Iii |
І + 1 |
|
|
|
|
|
|
|
|
|
і = 2 |
|
|
|
|
|
|
|
§ 9.4. ПРЕОБРАЗОВАНИЕ ВНУТРЕННИХ ЦЕПОЧЕК ДЕРЕВА |
343 |
ревьев, описанных в § 8.2, следует, что признаки эле ментов, входящих в каждую из изображенных на рис. 9.5 ветвей, располагаются в одном из этих интервалов.
Если отмеченную цепочку мы перестроим произволь ным образом, то получится участок дерева с конфигура
цией, |
отличающейся |
от исходной, но тоже |
содержащий |
|
s + 1 |
точку роста. Из |
основных свойств дерева |
следует, |
|
что всегда существует способ, и притом |
единственный, |
|||
подсоединения 5 + 1 |
ветви, изображенных |
на |
рис. 9.5, |
|
к s + 1 точке роста перестроенной цепочки, |
при |
котором |
дерево остается упорядоченным. Выделение из состава дерева некоторых внутренних цепочек, их перестройка и подсоединение ветвей дерева, связанных с узлами цепоч ки, к точкам роста перестроенной цепочки представляет собой один из возможных методов перестройки дерева.
Средняя длина поиска после такой перестройки мо жет измениться любым образом, т. е. либо уменьшиться, либо увеличиться. Поэтому в алгоритме перестройки дерева указанным способом обязательно должны быть средства, позволяющие выделить из всех возможных перестроек в дереве те перестройки, которые уменьшают либо среднюю, либо максимальную длину поиска.
Алгоритм выявления целесообразных перестроек рассматриваемого типа, естественно, оказывается тем проще, чем меньше размер перестраиваемых цепочек и чем проще характер их перестройки. Самой простой и
легче всего реализуемой является перестройка |
цепочек |
из трех элементов способом, изображенным на |
рис. 9.2 |
и 9.3. При такой перестройке адреса связи и адреса ин формации преобразуются так, как это показано на рис.
9.6и 9.7.
На этих рисунках обозначены:
—номерами 1—3 ячейки ЗУ, в которых хранятся управляющие слова объектов, входящих в состав пере страиваемой цепочки,
—буквами а, Ь, с объекты, связанные адресами ин формации с управляющими словами, входящими в состав перестраиваемой цепочки,
—номерами 4—7 ячейки ЗУ, связанные с ячейками /—3 адресами связи,
—буквами А, В, С, D ветви дерева, связанные адре сами связи с управляющими словами, хранящимися в
344 ГЛ. 9. МЕТОДЫ ПЕРЕСТРОЙКИ ДВОИЧНЫХ ДЕРЕВЬЕВ
ячейках |
1, |
2, 3. Управляющие слова вершин |
ветвей |
А, В, С, |
D |
хранятся соответственно в ячейках ЗУ |
с но |
мерами 4, 5, |
6, 7. |
|
Рис. 9.6. Перестройка цепочки из трех элементов, связанных двумя правыми адресами.
Рис. 9.7. Перестройка цепочки из трех элементов, связанных одним правым и одним левым адресом.
На рис. 9.6 и 9.7 адреса связи изображены сплош ными стрелками, а адреса информации — пунктирными стрелками.
Цепочка из трех элементов, связанных друг с другом только правыми адресами, вместе со своими ветвями (рис. 9.6, а) преобразуется в форму, изображенную на
346 ГЛ. 9. МЕТОДЫ ПЕРЕСТРОЙКИ ДВОИЧНЫХ ДЕРЕВЬЕВ
Формула (9.35) для |
Д/ с р |
в |
новых обозначениях |
запи |
шется в виде |
|
|
|
|
Л / с р = = 7 + l ( m |
' _ m 3 ) |
= |
7 + T ( m î ' ~ m 2 ) ' |
( 9 - 3 7 ) |
Перестройка дерева оказывается целесообразной с точки зрения уменьшения средней длины поиска тогда, когда в выбранной для перестройки цепочке Д / с р ока зывается отрицательным, т. е.
т2>т"1. |
(9.38) |
Решение о перестройке дерева в процессе записи в него нового элемента должно приниматься следующим обра зом: на дерево налагаются некоторые условия, которые перед записью в дерево каждого нового элемента вы полняются. Однако после записи в дерево нового элемен та эти условия могут нарушиться. Если это происходит, то после обнаружения факта нарушения условия назна чается перестройка, восстанавливающая выполнение условий, наложенных на дерево.
Ниже рассматриваются два варианта таких условий, а также способов проверки их выполнения и выявления цепочек, перестройка которых может восстановить вы полнение нарушенных условий.
9.4.2. Условие соотношения весов. Условием, нала гаемым на дерево и непосредственно вытекающим из
(9.38), является |
выполнение неравенства |
|
|
|
|||||
|
|
|
|
т2<т\ |
|
|
(9.39) |
||
во всех цепочках из двух узлов, которые могут |
быть |
||||||||
выделены в дереве. |
|
|
|
|
|
|
|||
Условие (9.39) будем называть условием |
соотношения |
||||||||
весов. Это условие означает, что вес левой |
(правой) |
вет |
|||||||
ви любого |
узла |
(1) дерева не должен быть |
меньшим, |
||||||
чем вес любой из двух |
ветвей узла |
(2) дерева, |
связанно |
||||||
го с узлом |
(1) |
дерева |
правым (левым)) |
адресом. При |
|||||
записи в дерево нового элемента вес т2 |
одной из |
вет |
|||||||
вей элемента |
(2), в которую нас привело |
направление |
|||||||
поиска, увеличивается |
на |
единицу, |
что может |
привести |
|||||
к нарушению |
выполнения |
условия |
(9.39). В случае |
нару |
шения условия для перестройки назначается цепочка из трех элементов, начинающаяся с элемента (1) и веду-
§ 9.4. ПРЕОБРАЗОВАНИЕ ВНУТРЕННИХ ЦЕПОЧЕК ДЕРЕВА |
347 |
||
щая через элемент |
(2) в направлении |
поиска. При запи |
|
си в дерево нового |
элемента условие |
соотношения |
весов |
в принципе может нарушиться одновременно в несколь ких узлах но пути поиска, в результате чего может по требоваться перестройка нескольких узлов.
Для проверки условия (9.39)| необходимо в каждом узле дерева хранить в качестве служебной информации полный вес узла. В процессе записи в дерево каждого нового элемента во всех узлах по пути поиска веса соот ветствующих ветвей должны корректироваться, т. е. увеличиваться на единицу. Кроме того, при прохожде нии каждого узла в процессе поиска в специально отве денных для этого ячейках ЗУ запоминаются адрес узла и вес той его ветви, на которую мы не попали в процессе поиска. Вес, который мы запомнили, дает возможность после перехода к следующему узлу проверить выполне ние условия (9.39). В случае его выполнения мы можем вернуться по адресу, который был сохранен, чтобы вы полнить требуемую перестройку.
Веса узлов, изменившиеся в результате перестройки, должны быть скорректированы. Непосредственно по рис. 9.6 можно составить табл. 9.4, показывающую, как изме няются адреса и веса во всех узлах перестраиваемой цепочки с двумя правыми адресами (обозначения в табл. 9.4 и 9.5 соответствуют обозначениям, введенным в гла ве 8).
В рассматриваемом случае выбран такой вариант перестановки адресов, при котором управляющее слово
|
|
|
|
|
|
|
|
|
Т а б л и ц а |
9.4 |
||
|
Ячейка ЗУ № |
l |
|
Ячейка ЗУ № 2 |
Ячейка ЗУ № 3 |
|||||||
|
|
|
|
|
|
|
(N |
|
|
|
со |
|
|
— |
о. |
•ѳ* |
|
|
|
•Ѳ" |
|
со |
О. |
.©* |
s |
|
|
|
s |
5 |
«С |
|
X |
І |
-с |
< |
X |
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
3 |
b |
|
i |
|
С |
т3 |
До пере |
4 |
2 |
а |
т1 |
5 |
т.2 |
6 |
7 |
||||
стройки |
|
|
|
|
|
|
|
|
|
|
|
|
После |
2 |
3 |
b |
|
4 |
5 |
а |
m 4 + |
6 |
7 |
С |
Щ |
пере |
|
|
|
|
|
|
|
|
|
|
|
|
стройки
348 ГЛ. 9. МЕТОДЫ ПЕРЕСТРОЙКИ ДВОИЧНЫХ ДЕРЕВЬЕВ
перестроенной цепочки остается в |
той же ячейке ЗУ, |
в которой находилось управляющее |
слово цепочки до пе |
рестройки. Это позволяет обойтись |
без изменения адреса |
связи, ведущего к вершине перестраиваемой цепочки и, следовательно, избежать необходимости запоминания адреса узла, предшествующего возможной перестраивае
мой цепочке в |
процессе выполнения |
алгоритма |
записи |
||
в дерево нового |
элемента. |
|
|
|
|
Кроме адресов и весов, в управляющих словах |
долж |
||||
но быть изменено значение веса т"ѵ |
которому |
должно, |
|||
быть |
присвоено |
скорректированное |
значение |
веса т 2 , |
|
и затем осуществлен переход по дереву к ячейке |
З У № 3 . |
||||
Для цепочки с двумя левыми адресами все преобразо |
|||||
вания |
выполняются аналогично. |
|
|
|
|
По |
рис. 9.7 |
может быть составлена табл. 9.5, пока |
|||
зывающая изменения адресов и весов в результате пе |
рестройки цепочки с правым адресом от вершины цепоч
ки и левым |
адресом |
от |
следующего |
элемента |
|
цепочки |
|||||
(обозначения |
в |
табл. |
9.5 |
аналогичны |
обозначениям |
в |
|||||
табл. 9.4). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Т а б л и ц а |
9.5 |
||
|
Ячейка № 1 |
|
Ячейка № 2 |
Ячейка № 3 |
|
||||||
|
|
|
|
ся |
|
|
|
|
en |
|
|
|
— |
о. |
|
о. |
•Ѳ* |
|
о. |
•Ѳ* |
|
|
|
|
|
£ |
с; |
е |
s |
S |
|||||
|
|
|
"С |
|
|
"С |
•1 |
||||
До |
4 2 а |
3 5 ь |
т2 |
6 7 С |
т3 |
|
|||||
перестройки |
|
|
|
|
|
|
|
|
|
|
|
После |
2 |
3 |
с |
4 |
6 |
а |
|
7 5 |
Ъ |
|
|
перестройки |
|
|
|
|
|
|
+ 1 |
|
|
+ |
1 |
Корректировка веса т'[ в рассматриваемом случае осуществляется несколько сложнее, так как из вершины перестроенной цепочки, как это следует из рис. 9.7, в направлении поиска может произойти переход как к ячейке ЗУ № 2, так и к ячейке ЗУ № 3. Поэтому после перестройки признак элемента, записываемого в дерево, следует сравнить с признаком элемента в вершине пере строенной цепочки и в зависимости от результата срав-
§ 9.4. ПРЕОБРАЗОВАНИЕ |
ВНУТРЕННИХ ЦЕПОЧЕК ДЕРЕВА |
349 |
нения присвоить весу |
т\ скорректированное значение |
веса т2 с последующим переходом по дереву к ячейке
ЗУ № 3, либо присвоить весу т'[ скорректированное |
зна |
|
чение веса т 3 с |
последующим переходом к ячейку |
ЗУ |
№ 2. |
|
|
Для цепочки |
с левым адресом от вершины цепочки |
и правым адресом от следующего элемента цепочки все
преобразования выполняются |
аналогично. |
|
|
Характер изменения весов |
т\ и т"2 в результате пе |
||
рестройки цепочки |
показан на рис. 9.8 и 9.9, |
первый из |
|
которых относится |
к цепочке |
типа рис. 9.6, а |
второй — |
к цепочке типа рис. 9.7. |
|
|
|
На рис. 9.8 и 9.9 ветвь вершины цепочки |
изображе |
на в виде совокупности m равноотстоящих точек на от резке прямой, где m — вес ветви. Каждому элементу ветви ставится в соответствие одна из m точек таким
образом, |
чтобы признак элемента оказался монотонной |
|
функцией |
номера точки. На рис. 9.8 и 9.9 |
непосредствен |
но отмечены только четыре элемента: а, |
Ъ, с, d, распо |
ложенные на пути поиска, три из которых — а, Ь, с — вхо дят в состав перестраиваемой цепочки.
Выбранный способ изображения ветви дает возмож
ность построить два отрезка прямых, |
пропорциональных |
|||||||
по длине весам т\ и |
т2. |
|
|
|
|
|
||
На рис. 9.8 и 9.9 ветви цепочек изображены в момент, |
||||||||
когда условие |
(9.39) |
нарушилось только |
после |
записи |
||||
в дерево |
последнего |
элемента, |
т. е. |
оказалось, |
что |
|||
т'2—т\-\-\, |
и, |
следовательно, |
требуется |
перестройка. |
||||
Из рис. 9.8 |
видно, что при перестройке |
цепочки |
типа |
|||||
рис. 9.6 возможны два варианта, отличающиеся |
положе |
нием элемента d и, как следствие, величиной т'2. Одна ко в обоих случаях при перестройке вес т\ увеличивает ся, а вес т2 уменьшается и нарушение условия (9.39) всегда устраняется.
Из рис. 9.9 видно, что при перестройке цепочки типа рис. 9.7 также возможны два варианта. Если элемент d после перестройки оказывается на правой ветви вер шины цепочки, то вес т\ увеличивается, а вес т'2 умень шается и нарушение условия (9.39) устраняется. Если после перестройки элемент d оказывается на левой
350 |
ГЛ. 9. МЕТОДЫ ПЕРЕСТРОЙКИ |
ДВОИЧНЫХ |
|
ДЕРЕВЬЕВ |
|
|||||||||||
/ 2 |
ч . |
а |
|
До |
перестройки |
ь |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
После |
|
перестройки |
|
|
|
|
|
|||||
|
i |
а |
|
( бариангп N f ) |
|
|
|
с |
|
d |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
m; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
После |
|
перестройки |
|
|
|
|
|
|||||
|
|
|
|
(бариангп |
N2) |
|
Ь |
|
d |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
— m |
|
|
|
|
|
|
гп'г |
|
|
|
||||
|
|
• |
- |
Вершина |
цепочки |
|
|
|
|
|
|
|||||
|
|
о |
- |
Другие |
|
элементы |
цепочки |
|
|
|
|
|||||
Р и с |
9.8. Изменение |
весов |
в результате |
перестройки |
цепочки, |
пока |
||||||||||
|
|
|
занной |
|
на |
рис. |
9.6. |
|
|
|
|
|
||||
і г |
с |
|
|
|
а |
|
Ло |
перестройки |
|
|
с |
о |
/77 |
|||
|
i i i |
i |
i i i i i i i i i i i |
|
||||||||||||
|
|
i i t |
|
i i i |
|
|
||||||||||
|
m. |
|
|
|
|
|
|
|
|
/77, |
|
|
|
|
|
|
|
|
|
|
|
|
После |
перестройки |
\ |
|
|
j |
|
||||
|
|
|
|
|
|
|
(бориант |
N1) |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
с |
d |
\b |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/77, • |
|
|
|
uJ^b |
|
|
|
|
После |
перестройки |
і |
|
|
|
|
||||
|
|
|
|
|
|
|
( |
бариангп |
N2) |
] |
|
|
|
|
||
|
|
|
|
|
- г |
|
|
|
|
|
I |
с |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
•4-«— /77,- |
|
|
||||
|
|
• |
- |
Вершина |
|
цепочки |
|
|
||||||||
|
|
|
|
|
|
|
|
|||||||||
|
|
о - Другие |
|
элементы |
цепочки |
|
|
|
||||||||
Рис. 9.9. Изменение |
весов в результате перестройки цепочки, показан |
|||||||||||||||
|
|
|
|
ной |
на |
рис. |
9.7. |
|
|
|
|
|
|