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

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

Бухгалтерский анализ вывиха

Когда мы выполняем вывих, мы платим определенное число кибердолларов (точная ценность оплаты будет определена в конце нашего анализа). Мы отличаем три случая:

• Если оплата равна работе вывиха, то мы используем все это, чтобы заплатить за

вывих.

• Если оплата больше, чем работа вывиха, мы вносим избыток в

счета нескольких узлов.

• Если оплата - меньше, чем работа вывиха, мы делаем отказы из

счета нескольких узлов, чтобы покрыть дефицит.

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

Бухгалтерский инвариант для вывиха

Мы используем схему, в которой передачи сделаны между счетами узлов гарантировать, что всегда будет достаточно кибердолларов, чтобы уйти для оплаты вывиха работы при необходимости.

Чтобы использовать бухгалтерский метод, чтобы выполнить наш анализ вывиха, мы поддерживаем следующий инвариант:

Прежде и после вывиха, у каждого узла v T есть r (v) кибердоллары в его счете.

Обратите внимание на то, что инвариант «финансово нормальный», так как он не требует, чтобы мы сделали предварительный депозит, чтобы обеспечить дерево нулевыми ключами.

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

458

Глава 10. Суждение Деревьев поиска 10.3: Позвольтеd быть изменением r (T) вызванный единственным вывихом под - шаг (крутой поворот, крутой поворот крутого поворота или зигзаг) для узла x в T. У нас есть следующее:

•d3£ (r (x)- r (x))- 2, если подшаг - крутой поворот крутого поворота или зигзаг

•d3£ (r (x)- r (x)), если подшаг - крутой поворот

Оправдание: Мы используем факт (см. Суждение 1, Приложение A), что, если a> 0,

b> 0, и c> + b,

зарегистрируйтесь +, регистрируют bрегистрацию за 2£ c- 2. (10.6)

Давайте считать изменение в r (T) вызванным каждым типом вывиха подшага.

крутой поворот крутого поворота: (Вспомните рисунок 10.13.), Так как размер каждого узла - еще один, чем

размер его двух детей, обратите внимание на то, что только разряды x, y, и z изменяются в операции крутого поворота крутого поворота, где y - родитель x, и z - родитель y. Кроме того,

r (x) = r (z), r (y)£ r (x) и r (y)³ r (x). Таким образом

d = r (x) + r (y) + r (z)- r (x)- r (y)- r (z)

£ r (y) + r (z)- r (x)- r (y)

£ r (x) + r (z)- 2r (x). (10.7)

Отметьте что n (x) + n (z)£ n (x). 10,6, r (x) + r (z)2£ r (x)- 2, то есть,

r (z)2£ r (x)- r (x)- 2.

Это неравенство и 10.7 подразумевает

d£ r (x) + (2r (x)- r (x)- 2)- 2r (x)

3£ (r (x)- r (x))- 2.

зигзаг: (Вспомните рисунок 10.14.) Снова, по определению размера и разряда, только

разряды x, y, и изменение z, где y обозначает родителя x и z, обозначают

родитель y. Кроме того, r (x) = r (z) и r (x)£ r (y). Таким образом

d = r (x) + r (y) + r (z)- r (x)- r (y)- r (z)

£ r (y) + r (z)- r (x)- r (y)

£ r (y) + r (z)- 2r (x). (10.8) Отметьте что n (y) + n (z) £ n (x); следовательно, 10,6, r (y) + r (z)r (x)- 2.

Таким образом

d2£ r (x)- 2- 2r (x)

3£ (r (x)- r (x))- 2.

крутой поворот: (Вспомните рисунок 10.15.) В этом случае, только разряды x и изменения y, где y

обозначает родителя x. Кроме того, r (y)£ r (y) и r (x)³ r (x). Таким образом

d = r (y) + r (x)- r (y)- r (x)

£ r (x)- r (x) 3£ (r (x)- r (x)).