- •Содержание
- •Поиск в двоичном дереве…………………….……………………...5 Добавление и удаление элемента ………...…………………………..7
- •Введение
- •13.1. Что такое двоичное дерево поиска?
- •13.2. Поиск в двоичном дереве
- •Следующий и предыдущий элементы
- •13.3. Добавление и удаление элемента
- •13.4 Случайные двоичные деревья поиска
- •14 Красно-чёрные деревья
- •14.1. Свойства красно-чёрных деревьев
- •14.2. Вращения
13.4 Случайные двоичные деревья поиска
Как мы видели, основные операции с двоичными деревьями поиска требуют времени О(h), где h — высота дерева. Поэтому важно понять, какова высота «типичного» дерева. Для этого необходимо принять какие-то статистические предположения о распределении ключей и последовательности выполняемых операций.
К сожалению, в общем случае ситуация трудна для анализа, и мы будем рассматривать лишь деревья, полученные добавлением вершин (без удалений). Определим случайное двоичное дерево поиска (randomly built search tree) из п pазличных ключей как дерево, получающееся из пустого дерева добавлением этих ключей в случайном порядке (все п! перестановок считаем равновероятными). (Это не означает, что все двоичные деревья равновероятны, поскольку разные порядки добавления могут приводить к одному и тому же дереву.) В этом разделе мы докажем, что математическое ожидание высоты случайного дерева из п ключей есть O(logn).
Посмотрим, как связана структура дерева с порядком добавления ключей.
Лемма
13.3. Пусть
Т —
дерево,
полученное из пустого добавлением п
различных ключей
k
,
k
,
...,
kn
(в указанном порядке). Тогда ki
является предком kj
в
T
тогда
и только тогда, когда i
< j,
и при этом
ki
= min{k
:
1< l< i
и
k
> kj
}
(ключ
ki
больше kj
и их не разделяет ни один ключ из k
,
k
,
...,
kn)
или
ki
= max{k
:
1< l< i
и
k
> kj
}
(ключ
ki
больше kj
и их не разделяет ни один ключ из k
,
k
,
...,
kn).
Доказательство.
=> Предположим,
что ki
является
предком kj.
Очевидно,
К (потомок
появляется в дереве позже предка).
Рассмотрим дерево Ti,
которое
получается
после добавления ключей k
,
k
,
...,
kn.
Путь
в Тг
от
корня до ki
тот
же, что и путь в Т от корня до ki.
Таким образом, если бы ключ kj
был
добавлен в Тi
он стал бы правым или левым ребёнком
ki.
Следовательно,
ki
является
либо наименьшим среди тех ключей из k
,
k
,
...,
ki,
которые больше
kj,
либо
наибольшим среди ключей из того же
набора, меньших kj.
Предположим,
что ki
является
наименьшим среди тех ключей из k
,
k
,
...,
ki,
которые
больше kj.
(Другой
случай симметричен.) Что будет происходить
при помещении ключа kj
в
дерево? Сравнение kj
с
ключами на пути от корня
к ki
даст
те же результаты, что и для ki.
Cледовательно,
мы пройдём путь
от корня до ki,
так
что kj
станет
потомком ki.
Теперь можно понять, как зависит глубина каждого ключа от перестановки на входе.
Следствие
13.4. Пусть
Т —
дерево,
полученное из пустого добавлением п
различных
ключей k
,
k
,
...,
kn
(в указанном порядке). Для каждого ключа
ki
(при всех
)
рассмотрим
множества
Gj
=
{
ki
:
и kl
>
ki
> kj
при всех l<i,
для
которых ki>
kj}
Lj
= {
ki
:
и
kl
>
ki
> kj
при
всех l<i,
для
которых ki<kj
}.
Тогда
множество ключей на пути из корня в kj
—в
точности
,
a
глубина
kj
в
дереве Т равна
d(kj
,T)
=
.
На
рис. 13.5 изображены множества
и
.
Их
построение можно объяснить
так. Считая для наглядности ключи
числами, будем отмечать их на числовой
оси: сначала k1,
потом
k2
и
так далее вплоть до kj.
В
каждый момент на
оси отмечено несколько точек k1,...,
kt
(где
).
Посмотрим, какая из
этих точек будет ближайшей справа к
будущему положению ключа kj
. Множество
всех таких ближайших точек (для всех
моментов времени t
= 1, 2,...,j-
1) и
есть
.
Ближайшие
слева точки образуют множество
.
Наша
цель — оценить сверху количество
элементов в
и
,
поскольку сумма
этих количеств равна глубине ключа kj.
Фиксируем
некоторое j.
Число
элементов
в
будет
случайной величиной, зависящей от
порядка ключей на входе
(имеет значение лишь порядок на ключах
k1,...,kj).
Мы
хотим оценить это
число сверху (доказать, что вероятность
события «это число велико» мала).
Следующий
факт из теории вероятностей играет
центральную роль при этой
оценке.Лемма
13.5. Пусть
k
,
k
,
...,
kn
есть случайная перестановка п различных
чисел.
Для каждого i
от
1
до
п рассмотрим минимальный элемент в
множестве {k
,
k
,
...,
ki}.
Множество всех таких элементов назовём
S:
S
= {
ki
:
и
kl
> ki
для всех l
< i}. (13.1)
Тогда
,
где
Нп
-
п-я
частичная сумма гармонического ряда,
а
- корень
уравнения (
.
Доказательство.
Будем
следить за тем, как меняется множество
{
k
,...,
kj}
с
ростом i.
На i-м
шаге к нему добавляется элемент ki,
причём
он с равными вероятностями
может оказаться первым, вторым, ..., i-м
по величине (каждой из
этих возможностей соответствует равная
доля входных перестановок). Таким
образом, вероятность
увеличения множества S
на i-м
шаге равна 1/i
при любом порядке
среди ключей k
,...,
ki-1
,
так что для разных г эти события
независимы. Мы
приходим к ситуации, описанной в теореме
6.6: имеется последовательность
независимых испытаний, вероятность
успеха в i-м
испытании равна 1/i.
Нам
надо оценить число успехов.

(а)
|
ключи |
21 |
9 |
4 |
25 |
7 |
12 |
3 |
10 |
19 |
29 |
29 |
6 |
26 |
18 |
|
|
21 |
|
|
25 |
|
|
|
|
19 |
29 |
|
|
|
|
|
|
21 |
|
|
|
|
|
|
|
19 |
|
|
|
|
|
|
|
|
9 |
4 |
|
7 |
12 |
3 |
10 |
|
|
|
|
|
|
|
|
|
9 |
|
25 |
12 |
|
|
|
|
|
|
|
|
|
(б)
Рис.
13.5. Множества Gj
и
,
составляющие в совокупности множество
ключей на пути
к ключу
kj
= 17.
(а) Черные вершины содержат ключи
из Gj,
белые—из
остальные
вершины — серые. Выделен путь к
ключу kj.
Ключи
левее пунктирной линии меньше
kj,
ключи правее — больше, (б) Множество
G'j
= {21,25,19,29} состоит из ключ добавленных
раньше ключа 17 и больших 17. Множество
Gj
=
(21,19} состоит из ключей, бывших
ближайшими справа к ключу 17, то есть
бывших минимальными в уже появившейся
части
.
Ключ
21 был добавлен первым к G'j
и
попал в Gj;
ключ 25 не попал (он больше текущего
минимума, равного 21). Ключ 19 попадает в
Gj,
потому
что он меньше 21, а 29 – нет,
так как 29 > 19. Множества L'j
и
Lj
строятся
аналогичным образом.
Математическое
ожидание этого числа равно 1 + 1/2 + . . . +
1/i
= Hn
= lni+О(1),
см. формулу (3.5) и задачу 6-2. Нам надо
оценить вероятность того, что
число успехов больше своего математического
ожидания в (
+
1) раз.
Это
делается с помощью теоремы 6.6. Напомним,
что математическое ожидание
|S|
есть
,
и по теореме 6.6 мы имеем

,
согласно
определению числа
.
После такой подготовки вернёмся к деревьям поиска.
Теорема 13.6. Средняя высота случайного двоичного дерева поиска, построенного по п различным ключам, есть O(logn).
Доказательство.
Пусть
k
,
k
,
...,
kn
—
случайная перестановка данных п
ключей,
Т
—
дерево, полученное последовательным
добавлением этих ключей к пустому.
Для фиксированного номера j
и
для произвольного числа t
рассмотрим
вероятность
того, что глубина d(kj,T)
ключа
kj
не
меньше t.
Согласно
следствию
13.4 в этом случае хотя бы одно из множеств
gj
и
lj
должно
иметь размер
не менее t/2.
Таким
образом,
P{d(kJ4T)
t}
P{|Gj|
t/2}
+ P{|Lj|
t/2}. (13.2)
Вначале
рассмотрим P{|Gj|
t/2}.
Оценим
условную вероятность этого события
при фиксированном множестве U
= {t
: I
<
t
<
j
— 1
и kt
>
kj}
(т.
е. когда известно,
какие из элементов ki,..,,kj-i
больше
kj).
Мы
находимся в ситуации леммы
13.5 (все перестановки элементов с индексами
из U
равновероятны),
и поэтому
условная вероятность события |Gj|
t/2
при
данном U
равна
вероятности
того, что в случайной перестановке из
и
— |U|
элементов
есть по крайней мере
t/2
элементов,
меньших всех предыдущих. С ростом и
эта
вероятность только
растёт, так что все условные вероятности
не превосходят Р{|5|
t/2},
где
S
определено,
как в лемме 13.5. Поэтому и полная вероятность
события {|Gj|
t/2}
не превосходит Р{|5|
t/2}.
Аналогичным
образоми,
согласно
неравенству (13.2),
P{d(kj,T)
t}
2P{
|S|
t/2}.
Взяв
теперь t
= 2(
+
1)
где
=
1 + 1/2 + . . . + 1/n
,a
=4,32
корень уравнения
(ln(
— 1)
= 2) и применив лемму 13.5, мы заключаем,
что
P{d(kJ4T)
2(
+
1)
}
P{|Gj|
t/2}
+ P{|Lj|
t/2}.
Всего вершин в дереве не более n, поэтому вероятность того, что то вершина будет иметь глубину 2(3 + 1)Нп или больше, не более чем в п превосходит такую же вероятность для одной вершины, и потому не превосходит 2/n. Итак, с вероятностью по меньшей мере 1 — 2/n высота случайного дерева не превосходит 2(р 4- 1)Нп, и в любом случае она не больше п. Таким об зом, математическое ожидание не превосходит (2({3 4- 1)Нп)(1 - 2/n) + n(2/n) = 0(logn).
