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

680 Глава 14. Управление памятью и b-деревья

14.3.1 (a, b) Деревья

Уменьшать важность разницы в результативности между внутренней памятью

доступы и доступы внешней памяти для поиска, мы можем представлять нашу карту, используя многоканальное дерево поиска (Раздел 10.4.1). Этот подход дает начало генералу - eralization (2, 4) структура данных дерева, известная как (a, b) дерево.

(a, b) дерево - многоканальное дерево поиска, таким образом, что каждый узел имеет между a и

b дети и магазины между- 1 и b- 1 записи. Алгоритмы для поиска,

вставление, и записи удаления в (a, b) дерево является прямыми обобщениями

из соответствующих алгоритмов для (2, 4) деревья. Преимущество обобщения (2, 4) деревья к (a, b) деревья - то, что обобщенный класс деревьев обеспечивает структуру поиска flexible, где размер узлов и продолжительность различных операций по карте зависят от параметров a и b. Устанавливая параметры a и b соответственно относительно размера дисковых блоков, мы можем получить структуру данных, которая достигает хорошей работы внешней памяти.

Определение (a, b) Дерево

(a, b) дерево, где a и b - целые числа, такие, что2££ (b + 1)/2, мульти -

путем дерево поиска T со следующими дополнительными ограничениями:

Собственность размера: у Каждого внутреннего узла есть, по крайней мере, ребенок, если это не корень, и

имеет в большинстве b детей.

Собственность глубины: у Всех внешних узлов есть та же самая глубина. Суждение 14.1: высота (a, b) дерево, хранящее n записи, являетсяW (зарегистрируйте регистрацию n/b),

и O (регистрируют регистрацию n/a).

Оправдание: Позвольте T быть (a, b) дерево, хранящее n записи, и позволить h быть высотой T. Мы оправдываем суждение, устанавливая следующие границы на h

регистрация b 1 регистрации (n + 1)£ h1£ регистрирует n + 1 + 1. регистрация a 2

Размером и свойствами глубины, номер n ′′ внешних узлов T, по крайней мере, 2ah-1 и в большей части bh. Суждением 10.7, n ′′ = n + 1. Таким образом

£2ah-1 n +1£ bh.

Беря логарифм в основе 2 из каждого термина, мы добираемся

(h- 1), регистрируются +регистрация за 1£ (n + 1), £ h регистрируют b.

14.3. Внешний поиск и b-деревья 681

Поиск и операции по обновлению

Мы вспоминаем, что в многоканальном дереве поиска T, каждый узел v T держит вторичную структуру M (v), который является самостоятельно картой (Раздел 10.4.1). Если T (a, b) дерево, то M (v) магазины при большинстве b записей. Позвольте f (b), обозначают время для выполнения поиска в карте, M (v). Алгоритм поиска в (a, b) дерево точно походит на тот для многоканальных деревьев поиска, данных в Разделе 10.4.1. Следовательно, ища в (a, b) дерево T с n записями берет O ((f (b) / регистрируют регистрацию a) n) время. Отметьте что, если b - константа (и таким образом также), то время поиска - O (регистрируют n).

Главное применение (a, b) деревья для карт, сохраненных во внешней памяти. А именно, чтобы минимизировать дисковые доступы, мы выбираем параметры a и b так, чтобы каждый узел дерева занял единственный дисковый блок (так, чтобы f (b) = 1, если мы хотим просто посчитать блочные пересылки). Обеспечение права a и ценности b в этом контексте дает начало структуре данных, известной как B-дерево, которое мы описываем вскоре. Прежде чем мы опишем эту структуру, однако, давайте обсудим, как вставки и удаления обработаны в (a, b) деревья.

Алгоритм вставки для (a, b) дерево подобно этому для (2, 4) дерево. overflow происходит, когда вход вставлен в b-узел v, который становится нелегалом (b + 1) - узел. (Вспомните, что узел в многоканальном дереве - d-узел, если у него есть d дети.) Чтобы исправить overflow, мы разделяем узел v, перемещая средний вход v

в родителя v и заменяющий v с⌈ (b + 1)/2 -узел v и⌊ (b + 1)/2 ⌋-

узел v ′′. Мы можем теперь видеть основания для требования£ (b + 1)/2 в определении

из (a, b) дерево. Обратите внимание на то, что в результате разделения мы должны построить

вторичные структуры M (v ) и M (v ′′).

Удаляя вход из (a, b) дерево подобно тому, что было сделано для (2, 4) деревья. underflow происходит, когда ключ удален из анода v, отличный от

корень, который заставляет v становиться нелегалом (a-1) - узел. Исправить underflow,

мы выполняем передачу с родным братом v, который не является анодом, или мы выполняем сплав

из v с родным братом, который является анодом. Новый узел w следующий из сплава является a

(2a- 1) - узел, который является другой причиной требования£ (b + 1)/2.

Таблица 14.1 показывает исполнение карты, понятой с (a, b) дерево.

Операция Время

найти

O

f (b)

регистрация a

регистрация n

вставка

O

g (b)

регистрация a

регистрация n

стереть

O

g (b)

регистрация a

регистрация n

Таблица 14.1: Время ограничивает для карты n-входа, понятой (a, b) дерево T. Мы принимаем вторичную структуру узлов поиска поддержки T в f (b) время и разделяемся и операции по сплаву в g (b) время для некоторых функций f (b) и g (b), который может быть сделан быть O (1), когда мы только считаем дисковые передачи.