
книги из ГПНТБ / Папернов А.А. Методы упорядочения информации в цифровых системах
.pdfГЛАВА 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.'»Линф[Лтек] |
|
|
Лтек:-Лл[Лтек] |
|
Лтек--=Лпр [Лтек] |
|
Переходпо AmmI© |
|
Переход по Атѵ, |
Лтек.--Лпр[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> ^пкю |
АпК | | и |
вероятности |
|
Рн, Ркп, Ркн стабилизируются. |
|
|
|
|||
Покажем, что эти значения математических ожиданий |
||||||
и вероятностей |
сохраняются и при больших |
п. |
|