Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Двоичные деревья поиска и красно-черные деревья....doc
Скачиваний:
1
Добавлен:
05.11.2018
Размер:
235.01 Кб
Скачать

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 < j1 и 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).