
04 - Нелинейные структуры данных.ppt
- Количество слайдов: 144
Алгоритмы и структуры данных. Нелинейные структуры данных. Алгоритмы на деревьях
Основные структуры данных Граф G=(V, E) состоит из конечного непустого множества узлов V и множества ребер E. Дерево — это ориентированный ациклический граф, удовлетворяющий следующим условиям: • 1) имеется в точности один узел, называемый корнем, в который не входит ни одно ребро, • 2) в каждый узел, кроме корня, входит ровно одно ребро, • 3) из корня к каждому узлу идет путь (который, как легко показать, единствен).
1. Представление графа
1. Представление графа Существует два основных способа представления графа: • Матрица смежности • Списки смежности
1. Представление графа Матрица смежности
1. Представление графа Список смежности
1. 1. Представление двоичного дерева
1. 2. Пирамидальное дерево Пирамида (binary heap) — это структура данных, представляющая собой объект-массив, который можно рассматривать как почти полное бинарное дерево. Каждый узел этого дерева соответствует определенному элементу массива. На всех уровнях, кроме, может быть, последнего, дерево полностью заполнено (заполненный уровень — это такой, который содержит максимально возможное количество узлов). Последний уровень заполняется слева направо до тех пор, пока в массиве не закончатся элементы.
1. 2. Пирамидальное дерево Различают два вида бинарных пирамид: неубывающие и невозрастающие. В пирамидах обоих видов значения, расположенные в узлах, удовлетворяют свойству пирамиды, являющемуся отличительной чертой пирамиды того или иного вида. Свойство невозрастающих пирамид заключается в том, что для каждого отличного от корневого узла с индексом i выполняется следующее условие: значение узла не превышает значение родительского по отношению к нему узла.
1. 2. Пирамидальное дерево Пример невозрастающей пирамиды
1. 2. Пирамидальное дерево Пример неубывающей пирамиды
2. 1 Сортировка с помощью дерева • Строится двоичное дерево сравнения ключей. Построение дерева начинается с листьев, которые содержат все элементы массива. Из каждой соседней пары выбирается наименьший элемент, и эти элементы образуют следующий (ближе к корню уровень дерева). Из каждой соседней пары выбирается наименьший элемент и т. д. , пока не будет построен корень, содержащий наименьший элемент массива. • Для того, чтобы получить следующий по величине элемент, спустимся от корня по пути, ведущему к листу с наименьшим значением. В этой листовой вершине проставляется фиктивный ключ с "бесконечно большим" значением, а во все промежуточные узлы, занимавшиеся наименьшим элементом, заносится наименьшее значение из узлов непосредственных потомков. • Процесс продолжается до тех пор, пока все узлы дерева не будут заполнены фиктивными ключами.
2. 1 Сортировка с помощью дерева (Heapsort) Шаг 1
2. 1 Сортировка с помощью дерева (Heapsort) Шаг 2
2. 1 Сортировка с помощью дерева (Heapsort) Шаг 3
2. 1 Сортировка с помощью дерева (Heapsort) Шаг последний (восьмой)
2. 1 Сортировка с помощью дерева (Heapsort) Оценки алгоритма • В худшем случае O(nlog n)
2. 1 Сортировка с помощью дерева (Heapsort) Модификация алгоритма: Если перемещается вверх какой-нибудь элемент дерева, то поднимается вверх и наименьший из его потомков. Выгоды: • Позволяет избегать лишних сравнений
2. 1 Сортировка с помощью дерева (Heapsort) Шаг 1.
2. 1 Сортировка с помощью дерева (Heapsort) Шаг 1.
2. 1 Сортировка с помощью дерева (Heapsort) Шаг 1.
2. 1 Сортировка с помощью дерева (Heapsort) Шаг 1.
2. 1 Сортировка с помощью дерева (Heapsort) Шаг 2.
2. 1 Сортировка с помощью дерева (Heapsort) Шаг 3.
2. 2 Пирамидальная сортировка Построение неубывающей пирамиды: Пусть i - наибольший индекс из числа индексов элементов, для которых существенны ограничения пирамиды. Тогда берется элемент a[i] в построенном дереве и для него выполняется процедура просеивания, состоящая в том, что выбирается ветвь дерева, соответствующая min(a[2 i], a[2 i+1]), и значение a[i] меняется местами со значением соответствующего элемента. Если этот элемент не является листом дерева, для него выполняется аналогичная процедура и т. д. Такие действия выполняются последовательно для a[i], a[i-1], . . . , a[1].
2. 2 Пирамидальная сортировка Исходная пирамида
2. 2 Пирамидальная сортировка Шаг 1
2. 2 Пирамидальная сортировка Шаг 2
2. 2 Пирамидальная сортировка Шаг 3
2. 2 Пирамидальная сортировка Шаг 4
2. 2 Пирамидальная сортировка Шаг 4
2. 2 Пирамидальная сортировка Пирамидальный алгоритм: • Сначала строим невозрастающую пирамиду. • В корне пирамиды минимальный элемент массива • Строим невозрастающую пирамиду для подмассива A[2, . . , N] • И т. д.
2. 2 Пирамидальная сортировка Шаг 1
2. 2 Пирамидальная сортировка Шаг 2
2. 2 Пирамидальная сортировка Шаг 3
2. 2 Пирамидальная сортировка Шаг 4
2. 2 Пирамидальная сортировка Шаг 5
2. 2 Пирамидальная сортировка Шаг 6
2. 2 Пирамидальная сортировка Шаг 6
2. 2 Пирамидальная сортировка Сложность алгоритма • В худшем O(n. Logn) • В среднем O(n. Logn)
3. Внешняя сортировка Сортировка последовательных файлов, располагающихся во внешней памяти и слишком больших, чтобы можно было целиком переместить их в основную память. Наиболее часто внешняя сортировка применяется в системах управления базами данных при выполнении запросов, и от эффективности применяемых методов существенно зависит производительность СУБД.
3. 1. Прямое слияние Предположим, что имеется последовательный файл A, состоящий из записей a 1, a 2, . . . , an. Для сортировки используются два вспомогательных файла B и C (размер каждого из них будет n/2) Сортировка состоит из последовательности шагов, в каждом из которых выполняется распределение состояния файла A в файлы B и C, а затем слияние файлов B и C в файл A. На первом шаге для распределения последовательно читается файл A, и записи a 1, a 3, . . . , a(n-1) пишутся в файл B, а записи a 2, a 4, . . . , an - в файл C (начальное распределение). Начальное слияние производится над парами (a 1, a 2), (a 3, a 4), . . . , (a(n-1), an), и результат записывается в файл A. На втором шаге снова последовательно читается файл A, и в файл B записываются последовательные пары с нечетными номерами, а в файл C - с четными. При слиянии образуются и пишутся в файл A упорядоченные четверки записей. И так далее.
3. 1. Прямое слияние Начальное состояние файла A 8 23 5 65 44 33 1 6
3. 1. Прямое слияние Начальное состояние файла A Первый шаг Распределение Файл B Файл C Слияние: файл A 8 23 5 65 44 33 1 6 8 5 44 1 23 65 33 6 8 23 5 65 33 44 1 6
3. 1. Прямое слияние Начальное состояние файла A Первый шаг Распределение Файл B Файл C Слияние: файл A Второй шаг Распределение Файл B Файл C Слияние: файл A 8 23 5 65 44 33 1 6 8 5 44 1 23 65 33 6 8 23 5 65 33 44 1 6 8 23 33 44 5 65 1 6 5 8 23 65 1 6 33 44
3. 1. Прямое слияние Начальное состояние файла A Первый шаг Распределение Файл B Файл C Слияние: файл A Второй шаг Распределение Файл B Файл C Слияние: файл A Третий шаг Распределение Файл B Файл C Слияние: файл A 8 23 5 65 44 33 1 6 8 5 44 1 23 65 33 6 8 23 5 65 33 44 1 6 8 23 33 44 5 65 1 6 5 8 23 65 1 6 33 44 1 5 6 8 23 33 44 65
3. 1. Прямое слияние Сложность алгоритма O(log n)
3. 1. Естественное слияние Метод естественного слияния основывается на распознавании серий при распределении и их использовании при последующем слиянии. Как и в случае прямого слияния, сортировка выполняется за несколько шагов, в каждом из которых сначала выполняется распределение файла A по файлам B и C, а потом слияние B и C в файл A. При распределении распознается первая серия записей и переписывается в файл B, вторая - в файл C и т. д. При слиянии первая серия записей файла B сливается с первой серией файла C, вторая серия B со второй серией C и т. д. Если просмотр одного файла заканчивается раньше, чем просмотр другого (по причине разного числа серий), то остаток недопросмотренного файла целиком копируется в конец файла A. Процесс завершается, когда в файле A остается только одна серия.
3. 1. Естественное слияние Шаг 1
3. 1. Естественное слияние Шаг 2
3. 1 Сбалансированное многопутевое слияние В основе метода внешней сортировки сбалансированным многопутевым слиянием является распределение серий исходного файла по m вспомогательным файлам B 1, B 2, . . . , Bm и их слияние в m вспомогательных файлов C 1, C 2, . . . , Cm. На следующем шаге производится слияние файлов C 1, C 2, . . . , Cm в файлы B 1, B 2, . . . , Bm и т. д. , пока в B 1 или C 1 не образуется одна серия.
3. 1 Сбалансированное многопутевое слияние
3. 1 Сбалансированное многопутевое слияние
3. 1 Сбалансированное многопутевое слияние
3. 2 Многофазная сортировка Идея в том, что из имеющихся m вспомогательных файлов (m -1) файл служит для ввода сливаемых последовательностей, а один - для вывода образуемых серий. Как только один из файлов ввода становится пустым, его начинают использовать для вывода серий, получаемых при слиянии серий нового набора (m-1) файлов. Таким образом, имеется первый шаг, при котором серии исходного файла распределяются по m-1 вспомогательному файлу, а затем выполняется многопутевое слияние серий из (m-1) файла, пока в одном из них не образуется одна серия.
3. 2 Многофазная сортировка Предположим есть 3 файла. 1. Распределить серии на файлы 1 и 2 2. Слить серии с файлов 1 и 2 в файл 3. Если в файле 3 только одна серия – все. 3. Скопировать половину серий из файла 3 в файл 1. 4. Слить серии с файлов 1 и 3 в файл 2. Если в файле 2 только одна серия – все. 5. Скопировать половину серий из файла 1 в файл 2. Вернуться к шагу 2.
3. 2 Многофазная сортировка Метод трехфазной внешней сортировки дает желаемый результат и работает максимально эффективно (на каждом этапе сливается максимальное число серий), если начальное распределение серий между вспомогательными файлами описывается соседними числами Фибоначчи.
3. 2 Многофазная сортировка Пример: При использовании шести вспомогательных файлов идеальными распределениями серий являются следующие: 1 1 2 4 8 16 0 1 2 4 8 15 0 1 2 4 7 14 0 0 1 1 2 1 3 2 6 4 12 8. . . .
3. 3 Улучшение эффективности внешней сортировки за счет использования основной памяти Чем более длинные серии содержит файл перед началом применения внешней сортировки, тем меньше потребуется слияний и тем быстрее закончится сортировка Начальный файл частями считывается в основную память, к каждой части применяется один из наиболее эффективных алгоритмов внутренней сортировки (обычно Quicksort или Heapsort) и отсортированные части (образующие серии) записываются в новый файл
4. Бинарные деревья поиска • Для организации поиска в основной памяти особое значение имеют упорядоченные двоичные (бинарные) деревья. • Обладают тем свойством, что для любой вершины дерева значение ее ключа больше значения ключа любой вершины ее левого поддерева и меньше значения ключа любой вершины правого поддерева
4. Бинарные деревья
4. Бинарные деревья Поиск в бинарном дереве.
4. Сбалансированные деревья
4. Сбалансированные деревья
4. Сбалансированные деревья
4. Сбалансированные деревья
4. Сбалансированные деревья
4. Работа с бинарным деревом. • Поиск ключа • Поиск минимума/максимума • Предшествующий/последующий элемент
4. Работа с бинарным деревом. Поиск минимума
4. Предшествующий/последующий элемент Структура бинарного дерева поиска позволяет нам найти элементы даже не выполняя сравнение ключей. Если правое поддерево узла х непустое, то следующий за х элемент является крайним левым узлом в правом поддереве.
4. Предшествующий/последующий элемент
4. Предшествующий/последующий элемент
4. Предшествующий/последующий элемент
4. Поиск по бинарному дереву. Рассмотренные методы годятся для таблиц фиксированного размера, поскольку последовательное расположение записей делает вставку и удаление записей весьма трудоемкими. Если таблица динамически изменяется, то мы можем потратить на ее постоянное упорядочение куда больше времени, чем сэкономить на бинарном поиске. Явное использование структуры бинарного дерева позволяет быстро вставлять и удалять записи, а также эффективно выполнять поиск в таблице.
4. Вставка элемента. • Процедура получает в качестве параметра узел z, у которого key [z] = v, left [z] = NIL и right [z] = NIL, после чего она таким образом изменяет Т и некоторые поля z, что z оказывается вставленным в соответствующую позицию в дереве.
4. Вставка элемента.
4. Вставка элемента.
4. Вставка элемента.
4. Вставка элемента.
4. Вставка элемента.
4. Вставка элемента.
4. Удаление элемента. Процедура удаления узла z. Если у узла z нет дочерних узлов, то мы просто изменяем его родительский узел р [z], заменяя в нем указатель на z значением NIL. Если у узла z только один дочерний узел, то мы удаляем узел z 9 создавая новую связь между родительским и дочерним узлом узла z. Если у узла z два дочерних узла, то мы находим следующий за ним узел у, у которого нет левого дочернего узла, убираем его из позиции, где он находился ранее, путем создания новой связи между его родителем и потомком, и заменяем им узел z.
4. Удаление элемента. Первый случай
4. Удаление элемента. Первый случай
4. Удаление элемента. Второй случай
4. Удаление элемента. Второй случай
4. Удаление элемента. Второй случай
4. Удаление элемента. Третий случай
4. Удаление элемента. Третий случай
4. Удаление элемента. Третий случай
4. Сбалансированные деревья. Предложенный подход также дает общую технологию представления линейных списков длиной N таким образом, что любая из следующих операций может быть выполнена за время O(log N): i) поиск элемента по заданному ключу; и) поиск k-го элемента по заданному k; iii) вставка элемента в определенное место; iv) удаление определенного элемента. При последовательном расположении элементов линейных списков операции (i) и (ii) выполняются очень эффективно, в то время как операции (iii) и (iv) требуют порядка N шагов. С другой стороны, при использовании связанных элементов эффективно будут выполняться операции (iii) и (iv), а операции (i) и (ii) потребуют порядка N шагов. Представление линейных списков в виде дерева позволяет выполнить все четыре операции за O(log N) шагов.
4. Сбалансированные деревья Двоичное дерево называется идеально сбалансированным, если число вершин в его левом и правом поддеревьях отличается не более, чем на 1 Длины пути до любой листовой вершины дерева отличаются не больше, чем на 1 Высота идеально сбалансированного двоичного дерева с n вершинами составляет не более, чем log n
4. Сбалансированные деревья
4. Добавление элемента Пусть рассматриваемое дерево состоит из корневой вершины r и левого (L) и правого (R) поддеревьев. Будем обозначать через hl высоту L, а через hr - высоту R. Для определенности будем считать, что новый ключ включается в поддерево L. Если высота L не изменяется, то не изменяются и соотношения между высотой L и R, и свойства дерева сохраняются. Если же при включении в поддерево L высота этого поддерева увеличивается на 1, то возможны следующие три случая: a) если hl = hr, то после добавления вершины L и R станут разной высоты, но свойство сбалансированности сохранится; b) если hl < hr, то после добавления новой вершины L и R станут равной высоты, т. е. сбалансированность общего дерева даже улучшится; c) если hl > hr, то после включения ключа критерий сбалансированности нарушится, и потребуется перестройка дерева.
4. Добавление элемента 1 -й случай
4. Добавление элемента 1 -й случай
4. Добавление элемента 2 -й случай
4. Добавление элемента 2 -й случай
4. Добавление элемента 1 -й случай
4. Добавление элемента 1 -й случай
4. Добавление элемента 2 -й случай
4. Добавление элемента 2 -й случай
4. Удаление элемента Пусть рассматриваемое дерево состоит из корневой вершины r и левого (L) и правого (R) поддеревьев. Будем обозначать через hl высоту L, а через hr - высоту R. Для определенности будем считать, что ключ удаляется из поддерева L. Если высота L не изменяется, то не изменяются и соотношения между высотой L и R, и свойства дерева сохраняются. Если же при удалении из поддерева L высота этого поддерева уменьшается на 1, то возможны следующие три случая: a) если hl = hr, то после добавления вершины L и R станут разной высоты, но свойство сбалансированности сохранится; b) если hl > hr, то после удаления вершины L и R станут равной высоты, т. е. сбалансированность общего дерева даже улучшится; c) если hl < hr, то после включения ключа критерий сбалансированности нарушится, и потребуется перестройка дерева.
4. Сбалансированные деревья. Эффективность алгоритмов вставки и удаления – O(log N) Соответственно – эффективность простых операций над деревом O(log N)
5. 1 Красно-черные деревья представляют собой одну из множества "сбалансированных" схем деревьев поиска, которые гарантируют время выполнения операций над динамическим множеством О (lg n) даже в наихудшем случае. Красно-черное дерево представляет собой бинарное дерево поиска с одним дополнительным битом цвета в каждом узле. Цвет узла может быть либо красным, либо черным.
5. 1 Красно-черные деревья. Бинарное дерево поиска является красно-черным деревом, если оно удовлетворяет следующим красно-черным свойствам. 1. Каждый узел является красным или черным. 2. Корень дерева является черным. 3. Каждый лист дерева является черным. 4. Если узел — красный, то оба его дочерних узла — черные. 5. Для каждого узла все пути от него до листьев, являющихся потомками данного узла, содержат одно и то же количество черных узлов.
5. 1 Красно-черные деревья.
5. 2 “ 2 -3” деревья. Из каждого узла могут выходить либо две либо три ветви. Все внешние узлы должны находится на одном уровне. Каждый внутренний узел содержит либо один либо два ключа
5. 2 “ 2 -3” деревья.
5. 2 “ 2 -3” деревья.
5. 2 “ 2 -3” деревья.
5. 2 “ 2 -3” деревья.
5. 2 “ 2 -3” деревья - модификация
5. 3 Деревья оптимального поиска • Ранее предполагалось, что вероятность поиска любого возможного ключа одна и та же, т. е. распределена равномерно. • Встречаются ситуации, в которых можно получить информацию о вероятности обращений к отдельным ключам.
5. 3 Деревья оптимального поиска Пусть дерево поиска содержит n вершин, и обозначим через pi вероятность обращения к i-той вершине, содержащей ключ ki. Сумма всех pi равна 1. Постараемся теперь организовать дерево поиска таким образом, чтобы обеспечить минимальность общего числа шагов поиска, подсчитанного для достаточно большого количества обращений. Будем считать, что корень дерева имеет высоту 1 (а не 0, как раньше), и определим взвешенную длину пути дерева как сумму pi*hi (1<=i<=n), где hi - длина пути от корня до i-той вершины. Требуется построить дерево поиска с минимальной взвешенной длиной пути.
5. 3 Деревья оптимального поиска
5. 3 Деревья оптимального поиска
5. 3 Деревья оптимального поиска
5. 3 Деревья оптимального поиска
5. 3 Деревья оптимального поиска
5. 3 Деревья оптимального поиска Сложность построения дерева O(n^2) Имеется эвристический алгоритм, дающий дерево, близкое к оптимальному, со сложностью O(n*logn) и расходами памяти O(n).
5. 4 Деревья цифрового поиска В каждой вершине такого дерева хранится полный ключ, но переход по левой или правой ветви происходит не путем сравнения ключа-аргумента со значением ключа, хранящегося в вершине, а на основе значения очередного бита аргумента. Поиск начинается от корня дерева. Если содержащийся в корневой вершине ключ не совпадает с аргументом поиска, то анализируется самый левый бит аргумента. Если он равен 0, происходит переход по левой ветви, если 1 - по правой. Если не обнаруживается совпадение ключа с аргументом поиска, то анализируется следующий бит аргумента и т. д. , пока либо не будут проверены все биты аргумента, или мы не наткнемся на вершину с отсутствующей левой или правой ссылкой.
5. 4 Деревья цифрового поиска
6. Внешний поиск Рассмотренные методы поиска были разработаны для внутреннего поиска. Древовидные структуры довольно удобны для внешнего поиска, если выбрать подходящий способ представления дерева. Если проводить поиск в таком дереве так же, как в случае внутреннего поиска, нам понадобится около Ig. N обращений к диску для выполнения одного поиска. При N, равном миллиону, это означает порядка 20 обращений к диску. Однако стоит разделить таблицу на 7 -узельные "страницы", и при доступе к одной странице за один раз потребуется примерно в три раза меньше обращений к диску, т. е. практически поиск ускорится в три раза! Группирование узлов в страницы приводит к преобразованию бинарного дерева в "октарное" с разветвлением в каждой странице-узле на 8 путей. Если страницы будут иметь большие размеры, с разветвлением на 128 путей после каждого обращения к диску, то поиск элемента в таблице с миллионом элементов завершится при просмотре всего лишь трех страниц.
6. Внешний поиск
6. 1 Классические B-деревья B-дерево порядка n представляет собой совокупность иерархически связанных страниц внешней памяти (каждая вершина дерева - страница), обладающая следующими свойствами: • Каждая страница содержит не более 2*n элементов (записей с ключом). • Каждая страница, кроме корневой, содержит не менее n элементов. • Если внутренняя (не листовая) вершина B-дерева содержит m ключей, то у нее имеется m+1 страниц-потомков. • Все листовые страницы находятся на одном уровне.
6. 1 Классические B-деревья Узел, содержащий j ключей и j +1 указатель, может быть представлен как где К 1 < К 2 < • • • < Km, a Pi, указывает на поддерево с ключами между Ki, и Ki+1.
6. 1 Классические B-деревья Классическое B-дерево порядка 2
6. 1 Классические B-деревья Поиск в B-дереве производится очевидным образом. Предположим, что происходит поиск ключа K. В основную память считывается корневая страница. Предположим, что она содержит ключи k 1, k 2, . . . , km и ссылки на страницы p 0, p 1, . . . , pm. В ней ищется ключ K. Если он обнаруживается, поиск завершен. Иначе возможны три ситуации: • Если в считанной странице обнаруживается пара ключей ki и k(i+1) такая, что ki < K < k(i+1), то поиск продолжается на странице pi. • Если обнаруживается, что K > km, то поиск продолжается на странице pm. • Если обнаруживается, что K < k 1, то поиск продолжается на странице p 0.
6. 1 Классические B-деревья Включение нового ключа K в B-дерево. Производится поиск ключа K, поиск закончится в некоторой листовой странице A. Далее возможны два случая. • Если A содержит менее 2*n ключей, то ключ K просто помещается на свое место, определяемое порядком сортировки ключей в странице A. • Если же страница A уже заполнена, то работает процедура расщепления. Заводится новая страница C. Ключи из страницы A (берутся 2*n-1 ключей) + ключ K поровну распределяются между A и C, а средний ключ вместе со ссылкой на страницу C переносится в непосредственно родительскую страницу B.
6. 1 Классические B-деревья Вставка ключа 23, шаг 1
6. 1 Классические B-деревья Вставка ключа 23, шаг 2
6. 1 Классические B-деревья Исключение элемента из Б-дерева — процесс довольно прямолинейный. Здесь можно выделить два случая: 1. Исключаемый элемент находится на листовой странице: алгоритм удаления ясен и прост. 2. Элемент не находится на листовой странице: его нужно заменить одним из двух лексикографически смежных элементов.
6. 1 Классические B-деревья Удаление ключа 38, шаг 1
6. 1 Классические B-деревья Удаление ключа 38, шаг 2
6. 1 Классические B-деревья Удаление ключа со слиянием листов, шаг 1
6. 1 Классические B-деревья Удаление ключа со слиянием листов, шаг 2
6. 1 Классические B-деревья • Если смежный элемент находится на листовой странице, то его исключить просто. • Мы спускаемся вниз вдоль самых правых ссылок до листовой страницы Р, заменяем исключаемый элемент на правый элемент из Р и уменьшаем размер Р на единицу.
6. 1 Классические B-деревья Удаление ключа 25. Шаг 1
6. 1 Классические B-деревья Удаление ключа 25. Шаг 2
6. 1 Классические B-деревья Удаление ключа 25. Шаг 3
6. 2 B+ деревья Эти деревья похожи на обычные B-деревья. Они тоже сильно ветвистые, и длина пути от корня к любой листовой странице одна и та же. Но структура внутренних и листовых страниц различна. Внутренние страницы устроены так же, как у Bдерева, но в них хранятся только ключи (без записей) и ссылки на страницы-потомки. В листовых страницах хранятся все ключи, содержащиеся в дереве, вместе с записями, причем этот список упорядочен по возрастанию значения ключа
6. 2 B+ деревья (a) Структура внутренней страницы B+-дерева (b) Структура листовой страницы B+-дерева
6. 3 B* деревья В* -деревьями порядка m можно определить следующим образом. 1. Каждый узел, за исключением корневого, имеет не более m потомков. 2. Каждый узел, за исключением корневого и листьев, имеет не менее (2 m — 1)/3 потомков. 3. Корневой узел имеет не менее 2 и не более 2 [(2 m — 2)/3] + 1 потомков. 4. Все листья находятся на одном уровне. 5. Узлы, не являющиеся листьями и имеющие k потомков, содержат k - 1 ключ.