Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

10.3. Косые деревья 459

Суждение 10.4: Позвольте T быть косым деревом с корнем t и позволить∆ быть полным изменением

из r (T) вызванный, вывихивая узел x на глубине d. Мы имеем

∆3£ (r (t)- r (x))- d + 2.

Оправдание: Вывих узла x состоит из p =d/2 ⌉ вывихивающие подшаги, каждый

из которых крутой поворот крутого поворота или зигзаг, кроме возможно последнего, который является крутым поворотом если d

странное. Позвольте r0 (x) = r (x) быть начальным разрядом x, и поскольку я = 1..., p, позвольте ri (x) быть разрядом x после подшага ith иdi быть изменением r (T) вызванный подшагом ith. Аннотацией 10.3, полное изменение∆ r (T) вызванный, вывихивая x

∆=

i = å1di

p

p

£ я = å1 (3 (ri (x) - ri-1 (x)) - 2) + 2

= 3 (армированный пластик (x)- r0 (x))- 2 пункта + 2£ 3 (r (t)- r (x))- d + 2.

Суждением 10.4, если мы осуществляем платеж 3 (r (t)- r (x)) + 2 кибердоллара

к вывиху узла x, у нас есть достаточно кибердолларов, чтобы поддержать в -

вариант, держа r (v) кибердоллары в каждом узле v в T и плате за весь откос - работа луга, которая стоит d долларов. Начиная с размера корня t 2n + 1, его разряд r (t) = регистрация (2n + 1). Кроме того, у нас есть r (x) <r (t). Таким образом оплата, которая будет сделана для вывиха, является O (зарегистрируйте n), кибердоллары. Чтобы закончить наш анализ, мы должны вычислить стоимость для поддержания инварианта, когда узел вставлен или удален.

Вставляя новый узел v в косое дерево с n ключами, разряды всех предков v увеличены. А именно, позвольте v0, vi..., vd быть предками v, где v0 = v, vi является родителем vi-1, и vd - корень. Поскольку я = 1..., d, позвольте n (vi) и n (vi) быть размером vi прежде и после вставки, соответственно, и позволить r (vi) и r (vi) быть разрядом vi прежде и после вставки, соответственно. Мы имеем

n (vi) = n (vi) + 1.

Кроме того, с тех пор n (vi) +1£ n (vi+1), поскольку я = 0, 1..., d- 1, у нас есть следующее для

каждый я в этом диапазоне

r (vi) = регистрация (n (vi)) = регистрация (n (vi) + 1)регистрация £ (n (vi+1)) = r (vi+1).

Таким образом полное изменение r (T) вызванный вставкой

d d-1

å1

£ r (vd) + å1 (r (vi+1) - r (vi)) я =

i = r (vi) - r (vi)

= r (vd) - r (v0)

Регистрация £ (2n + 1).

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

460

Глава 10. Деревья поиска

Удаляя узел v от косого дерева с n ключами, разряды всех предков v уменьшены. Таким образом полное изменение r (T) вызванный удалением отрицательно, и мы не должны осуществлять платеж, чтобы поддержать инвариант, когда узел удален. Поэтому, мы можем суммировать наш амортизируемый анализ в следующем суждении (который иногда называют «суждением баланса» для косых деревьев).

Суждение 10.5: Рассмотрите последовательность m операций на косом дереве, каждый поиск, вставка или удаление, начинающееся с косого дерева с нулевыми ключами. Кроме того, позвольте ni быть числом ключей в дереве после операции i, и n быть общим количеством вставок. Полная продолжительность для выполнения последовательности операций

m

O m +å регистрируют ni,

i=1

который является O (m, регистрируют n).

Другими словами, амортизируемая продолжительность выполнения поиска, вставки или удаления в косом дереве является O (зарегистрируйте n), где n - размер косого дерева в то время. Таким образом, косое дерево может достигнуть логарифмически-разовой амортизируемой работы для imple-чеканка заказанной карты ADT. Эта амортизируемая работа соответствует исполнению худшего случая деревьев AVL, (2, 4) деревья и красно-черные деревья, но это делает настолько использующее простое двоичное дерево, которому не нужна никакая дополнительная информация баланса, хранившая в каждом из ее узлов. Кроме того, у косых деревьев есть много других интересных свойств, которые не разделены этими другими уравновешенными деревьями поиска. Мы исследуем один такой addi-tional собственность в следующем суждении (который иногда называют «Статическим Optimality» суждением для косых деревьев).

Суждение 10.6: Рассмотрите последовательность m операций на косом дереве, каждый поиск, вставка или удаление, начинающееся с косого дерева T с нулевыми ключами. Кроме того, позвольте f (i), обозначают количество раз вход, ко мне получают доступ в косом дереве, то есть, его частоте, и позволяют, n обозначают общее количество записей. Предполагая, что к каждому входу получают доступ, по крайней мере, однажды, тогда полная продолжительность для выполнения последовательности операций

n

O m +å f (i) регистрация (m/f (i)).

i=1

Мы опускаем доказательство этого суждения, но не настолько трудно оправдать, как можно было бы вообразить. Замечательная вещь состоит в том, что это суждение заявляет, что амортизируемая продолжительность доступа к входу я - O (регистрация (m/f (i))).