Главная страница
Навигация по странице:

  • Антипереполнение листа

  • Перераспределение ключей. Удаление из листа.

  • Удаление из промежуточного узла.

  • Слияние листьев. Удаление из листа.

  • Два типа узлов В+ дерева

  • Операция вставки в B+ дерево

  • Понятие данных


    Скачать 1.56 Mb.
    НазваниеПонятие данных
    Дата21.01.2021
    Размер1.56 Mb.
    Формат файлаpdf
    Имя файлаBD-Bilety-2016.pdf
    ТипДокументы
    #170274
    страница7 из 9
    1   2   3   4   5   6   7   8   9
    Инвертированный (метод вторичного индексирования)
    Значения ключей физических записей необязательно находятся в логической последовательности. Метод применяется только для выборки данных. Индекс может быть построен для каждого инвертированного поля. Эффективность доступа зависит от числа записей БД, числа уровней индексации и распределения памяти для размещения индекса.
    Инвертированные списки формируются системой для поисковых атрибутов, причем для каждого возможного значения такого атрибута составляется список уникальных номеров записей, в которых это значение атрибутов присутствует. Записи с одним и тем же значением поля группируются, а общее для всей группы значение используется в качестве указателя этой группы. Тогда при поиске записей по значениям поисковых атрибутов системе достаточно отыскать списки, соответствующие требуемым значениям, и выбрать номер записи согласно заданной «схеме» пересечения или объединения условий на значениях поисковых атрибутов, а также отрицания некоторого условия. На рис. 2. приведен пример поиска записей инверсированным методом доступа.
    • Последовательный метод доступа: для получения целевой записи – обращение ко всем предшествующим цели записям
    • Произвольный метод доступа: для получения целевой записи – непосредственное обращение к ней

    26. Бинарные деревья поиска, структура узла дерева. Многоходовое дерево.
    Бинарное дерево поиска на множестве NR ключей есть бинарное дерево TNR, в котором каждая вершина помечена отдельным ключом и расположена в соответствии с определенным порядком ключей. Для любой вершины i ключи вершин в его левом поддереве «меньше» ключа вершины i, который, в свою очередь, «меньше» ключей вершин в его правом поддереве.
    Упорядоченная тройка (TL, R, TR)
    R – корень дерева
    TL, TR – левое и правое поддеревья корня R;
    NL, NR – количество узлов в поддеревьях,
    NL≥ 0, NR≥ 0
    Общее количество узлов в дереве
    NQ = NL + NR + 1
    • Значение узла – ключ и некоторая запись RowId
    • Левый и правый указатели на поддеревья
    Длина поиска – длина пути от корня до целевой записи
    • 1. Уровень вершины или листа i, обозначаемый Li, определяется длиной пути от корневой вершины TNR до вершины i. Корневая вершина, по определению, имеет уровень 0.
    • 2. Высота дерева определяется как максимальный уровень среди всех вершин дерева.
    • 3. Бинарное дерево называется сбалансированным, если разница уровней любых двух листьев не превышает 1.
    Структура вершины В-дерева Обозначим записи, размещенные в одной вершине дерева, через R
    1
    , R
    2
    , …, R
    j
    , а указатели на подчиненные вершины через P
    0
    , P
    1
    , P
    2
    , …, P
    j
    . Тогда структура вершины будет следующей: P
    0
    R
    1
    P
    1
    R
    2
    P
    2
    … P
    j-1
    R
    j
    P
    j
    Правила следования:
    1. Ключи записей в текущей вершине упорядочены по возрастанию, т.е. ключ записи R
    1
    меньше ключа записи R
    2
    , который, в свою очередь, меньше ключа записи R
    3
    , и т.д.
    2. Записи в подчиненной вершине, на которую указывает P
    0
    , имеют ключи, меньшие, чем ключ записи R
    1 3. Записи в подчиненной вершине, на которую указывает P
    j
    , имеют ключи, большие, чем ключ записи R
    j
    4. Записи в подчиненной вершине, на которую указывает P
    i
    (0 < i < j), имеют ключи, большие, чем ключ записи R
    i
    , и меньшие, чем ключ записи R
    i+1
    Многоходовые деревья по структуре похожи на бинарные, за исключением того факта, что в одной вершине хранится больше одного ключа и оно имеет больше 2-х потомков. Для B дерева: в узле дерева степени n содержится минимум n-
    1, максимум 2n-1 ключей и j+1 потомок, где j=количеству ключей в узле. Ключи в узле упорядочены по возрастанию. В остальном структура в таких деревьях аналогична обычным бинарным деревьям. Структура ключа на рисунке. Должно выполняться условие { K(Pi-1)} Бывают следующие типы многоходовых деревьев: B, B+, Красно-Чёрные деревья и др.
    Структура узла B-дерева может выглядеть так:

    Текущее количество ключей в узле

    Значения ключей и сопутствующая ключам информация

    Указатели на дочерние узлы (для листьев здесь NULL)

    Указатель на родительский узел

    27. Определение В дерева. Структура узла В дерева.
    Бинарное дерево поиска на множестве NR ключей есть бинарное дерево TNR, в котором каждая вершина помечена отдельным ключом и расположена в соответствии с определенным порядком ключей. Для любой вершины i ключи вершин в его левом поддереве «меньше» ключа вершины i, который, в свою очередь, «меньше» ключей вершин в его правом поддереве
    Упорядоченная тройка (TL, R, TR)
    R – корень дерева
    TL, TR – левое и правое поддеревья корня R;
    NL, NR – количество узлов в поддеревьях,
    NL≥ 0, NR≥ 0
    Общее количество узлов в дереве
    NQ = NL + NR + 1
    • Значение узла – ключ и некоторая запись RowId
    • Левый и правый указатели на поддеревья
    Длина поиска – длина пути от корня до целевой записи
    • 1. Уровень вершины или листа i, обозначаемый Li, определяется длиной пути от корневой вершины TNR до вершины i. Корневая вершина, по определению, имеет уровень 0.
    • 2. Высота дерева определяется как максимальный уровень среди всех вершин дерева.
    • 3. Бинарное дерево называется сбалансированным, если разница уровней любых двух листьев не превышает 1.
    Структура вершины В-дерева Обозначим записи, размещенные в одной вершине дерева, через R
    1
    , R
    2
    , …, R
    j
    , а указатели на подчиненные вершины через P
    0
    , P
    1
    , P
    2
    , …, P
    j
    . Тогда структура вершины будет следующей: P
    0
    R
    1
    P
    1
    R
    2
    P
    2
    … P
    j-1
    R
    j
    P
    j
    Правила следования:
    1. Ключи записей в текущей вершине упорядочены по возрастанию, т.е. ключ записи R
    1
    меньше ключа записи R
    2
    , который, в свою очередь, меньше ключа записи R
    3
    , и т.д.
    2. Записи в подчиненной вершине, на которую указывает P
    0
    , имеют ключи, меньшие, чем ключ записи R
    1 3. Записи в подчиненной вершине, на которую указывает P
    j
    , имеют ключи, большие, чем ключ записи R
    j
    4. Записи в подчиненной вершине, на которую указывает P
    i
    (0 < i < j), имеют ключи, большие, чем ключ записи R
    i
    , и меньшие, чем ключ записи R
    i+1
    Структура узла B-дерева может выглядеть так:

    Текущее количество ключей в узле

    Значения ключей и сопутствующая ключам информация

    Указатели на дочерние узлы (для листьев здесь NULL)

    Указатель на родительский узел

    28. Правила вставки нового ключа в В дерево.
    Операции вставки предшествует поиск, который должен завершиться не успешно.
    Операция вставки позволяет включить новый элемент только в лист В-дерева. Поэтому, прежде всего, определяется целевая вершина – лист В-дерева, куда должен быть вставлен новый элемент, не нарушая упорядоченности записей.
    Когда целевая вершина (лист) В-дерева будет найдена, можно столкнуться со следующими ситуациями.
    1. Простейший случай, когда найденный лист имеет свободные позиции (не заполнен полностью). В этом случае новый элемент вставляется в найденный лист, не нарушая упорядоченности ключей.
    Пусть, например, имеется следующий фрагмент В-дерева порядка 2. Необходимо вставить элемент с ключом 7. Новый элемент должен быть размещен в листе с номером 2, в котором есть свободные позиции. В результате выполнения операции вставки получим новое В-дерево.
    2. Случай переполнения вершины: найденный целевой лист заполнен полностью. При вставке нового элемента в целевой лист получим последовательность из 2n+1 ключей, тогда как в листе могут находиться максимум 2n ключей. В этом случае выполняется операция расщепления листа: ключ из средней позиции переносится в родительскую вершину, а на уровне листьев появляются два новых листа.
    Рассмотрим пример. Пусть в представленное выше дерево порядка 2 вставляется элемент с ключом 37. Поэтому получим последовательность ключей: 7, 10, 15, 23, 37. В средней позиции находится элемент с ключом 15; он перемещается в родительскую вершину, и появляются два новых листа.
    Когда элемент перемещается в родительскую вершину, для нее также рассматриваются эти же две ситуации. Если родительская вершина заполнена полностью, для нее также выполняется операция расщепления с перемещением элемента на вышерасположенный уровень. В результате высота дерева может увеличиться на 1.
    Рассмотрим пример вставки нескольких значений в В-дерево порядка 1.
    Пусть вставляется следующая последовательность элементов: 20, 12, 48, 3, 5, 70, 101.
    1. Первые два элемента заполняют первый лист, который является одновременно и корнем В-дерева.
    2. Вставляется следующий элемент – 48. Получаем переполнение: 12, 20, 48. Элемент из средней позиции поднимается вверх и создает новую вершину – корень В-дерева, которой подчинены два листа
    3. Элемент с ключом 3 вставляется в самый левый лист
    4. Элемент с ключом 5 также должен быть вставлен в самый левый лист; получаем переполнение – 3, 5, 12, и элемент из средней позиции перемещается в родительскую вершину, в которой есть свободное место.
    5. Следующий элемент (70) вставляется в самый правый лист, в котором есть свободная позиция.
    6. В тот же лист должен быть вставлен следующий элемент с ключом 101; получаем переполнение – 48, 70, 101, и элемент из средней позиции перемещается в родительскую вершину. В родительской вершине также возникает переполнение – 5, 20, 70; в результате перемещения элемента из средней позиции образуется новая вершина – корень
    В-дерева , и высота дерева увеличивается на 1.
    20 12 20
    а)
    б)
    12 48 20 3
    12 48 20 3
    12 5
    20 48 3
    5 12
    а) переполнение листа б) расщепление листа
    3 12 5
    20 48 70 3
    12 5
    20 48 3
    12 5
    20 101 70
    а) результат расщепления листа
    48 101 70
    б) результат расщепления промежуточной вершины
    Процесс вставок можно продолжать, включая в дерево новые элементы.
    Таким образом, при вставке элементов в дерево В-дерево растет вверх – появляется новый корень, хотя новый элемент вставляется в лист дерева.
    47 101 7
    10 15 23 50 53 110 129
    а) переполнение листа
    15 47 101 7
    10 23 37 50 53
    б) после расщепления листа
    1 2
    3 4
    1 2
    5 3
    110 129 4
    37

    29. Правила удаления ключа из В дерева.
    При удалении возможны две ситуации:
    • Удаляемый элемент находится в листе;
    • Удаляемый элемент находится в промежуточном узле: тогда он заменяется следующим за ним (минимальный ключ из правого поддерева) или предшествующим ему (максимальный ключ из левого поддерева) элементом либо левое и правое поддеревья объединяются и их родителем становится ближайший левый от удаляемого ключа и ближайший правый от удаляемого ключа ключ.
    Нормальное удаление - когда в листе содержится более чем n элементов (n – степень дерева).
    Антипереполнение листа возникает тогда, когда в целевом листе находится только n ключей (минимально допустимое количество). Тогда нарушается свойство B-дерева и возможны два варианта решения:
    1. Перераспределение ключей;
    2. Слияние узлов.
    Перераспределение ключей. Удаление из листа. Метод возможно применить, если существует соседний лист
    (находящийся рядом с целевым и имеющий такого же родителя), который содержит больше n ключей (n – степень дерева, т.е. минимально возможное количество ключей), тогда выбираем ключ из этого соседа, который является разделителем между оставшимися ключами узла-соседа и исходного узла (то есть не больше всех из одной группы и не меньше всех из другой). Пусть это ключ k1. Выберем ключ k2 из узла-родителя, который является разделителем исходного узла и его соседа, который мы выбрали ранее. Удалим из исходного листа нужный ключ (который необходимо было удалить), спустим k2 в этот узел, а вместо k2 в узле-родителе поставим k1.
    Пример: фрагмент В-дерева степени 3; удаляется ключ 276
    В соседнем листе больше n ключей. Значит, удаляем 276 из нужного листа, перемещаем ключ-родитель 253 в этот лист, а на место родителя помещаем максимальный элемент листа-соседа 211. Результат:
    Удаление из промежуточного узла. Метод возможно применить, если у хотя бы одного дочернего узла количество ключей больше n. Ситуация: удаляем ключ k из узла x. Если левый дочерний узел (содержащий ключи, предшествующие ключу k ) содержит больше n ключей, то находим k1 – максимальный элемент левого дочернего узла. Удаляем k.
    Заменяем место k в узле x на k1. Проделываем аналогичную работу, если правый дочерний узел (содержащий ключи, бОльшие ключа k ) имеет больше n ключей.
    Пример. Фрагмент В-дерева степени 3; удаляется ключ 253 из узла.
    Ключ 253 мы можем заменить лишь ключом из левого дочернего узла, так как правый содержит ровно n ключей, а левый n+2 ключа (5 ключей). Максимальный элемент левого дочернего узла 211. Удаляем ключ 253, и на его место ставим ключ 211. Результат:
    Слияние листьев. Удаление из листа. Метод применим, если все соседние листы имеют ровно n ключей. Тогда целевой лист (из которого удаляем) мы объединяем с каким-либо соседом, удаляем нужный ключ. И тот ключ из узла-родителя, который был разделителем для этих двух «бывших» соседей, переместим в новообразовавшийся лист (очевидно, он будет в нём медианой, то есть находиться между ключами одного листа и другого листа).
    Пример. Фрагмент В-дерева степени 2; удаляется ключ 15.
    Перераспределить ключи нельзя, так как в соседнем листе тоже минимально возможное количество ключей – 2.

    Удаляем ключ 15. Перемещаем из родителя ключ 32 в левое поддерево.
    Сливаем лист с соседним узлом. Получаем:
    Удаление из промежуточного узла. Метод возможно применить если у обоих дочерних узлов количество ключей равно n. Ситуация: удаляем ключ k из узла x. Если оба (левый и правый дочерние узлы) имеют по n ключей, то объединяем этих детей, удаляем ключ k.
    Пример. Фрагмент В-дерева степени 2; удаляется ключ 32.
    Оба поддерева содержат n ключей, перераспределить нельзя. Сливаем оба узла в один, удаляем ключ 32, а следующие за ключом 32 ключи смещаем влево. Результат:

    30. Структуры типа В+ дерево. Структура узла В+ дерева. Правила вставки нового ключа в В+ дерево.
    Дерево - это иерархическая структура, состоящая из множества вершин (или элементов). Каждая вершина дерева относится к определенному уровню и обладает тем свойством, что, помимо внутренней информации, в ней также содержатся указатели на вершины более низкого уровня.
    Чтобы устранить недостатки, свойственные В-дереву при выполнении последовательной выборки данных, было введено В+ дерево. В+ дерево во многом аналогично В-дереву.
    Как и В-дерево, В+ дерево является сбалансированным. Для В+ дерева устанавливаются те же ограничения на количество ключей в каждой вершине дерева, зависящие от порядка дерева. Различие между В+ деревом от В-деревом заключается в следующем. В В-дереве все вершины дерева равноправны и содержат ключи и ассоциированные с ними данные. В В+ дереве выделяются два типа вершин: промежуточные вершины индексов и листья. Ключи и ассоциированные с ними данные размещаются только в листьях. Листья объединяются в связанное последовательное упорядоченное множество. Это позволяет эффективно выполнять последовательные запросы. Доступ к листьям осуществляется через промежуточные вершины В+ дерева, организованные в виде обычного В-дерева индексов.
    Два типа узлов В+ дерева: внутренние узлы–представляют собой В - дерево индексов; содержат только ключи • листья–
    объединены в двухсвязный список; содержат все ключи и ассоциированные с ними данные (RowID).
    Основные свойства: 1) Для любой вершины В+ дерева, включая листья, выполняются те же ограничения на количество ключей и указателей (в зависимости от порядка дерева), что и в В-дереве. 2) Все ключи в В+ дереве хранятся в листьях.
    Для обеспечения правильного доступа отдельные ключи могут дублироваться и в промежуточных вершинах индексов. 3)
    Доступ к информации в В+ дереве выполняется всегда за h шагов, где h – высота В+ дерева. 4) Выполнение операций включения и удаления в В+ дереве несколько отличается от выполнения соответствующих операций в В-дереве.
    Операция вставки в B+ дерево: В+ дерево также растет от листьев к корню. Включение начинается с листьев. Также в случае переполнения выполняется расщепление вершины, но в В+ дереве по-разному выполняется расщепление листа и расщепление промежуточной вершины дерева. При расщеплении листа в В+ дереве ключ, расположенный в средней позиции листа, перемещается в родительскую вершину и остается в листе – в правом или левом, но в каком-то одном для всех операций вставки. Расщепление промежуточной вершины В+ дерева выполняется точно так же, как и в В- дереве.
    1) Включение первых двух элементов ничем не отличается от их включения в В-дерево;
    2) Включение третьего элемента вызывает переполнение листа: 12, 20, 48. Элемент из средней позиции перемещается в родительскую вершину, в результате чего создается новый корень В+ дерева. Но так как в В+ дереве все ключи должны находиться в листьях, перемещаемый элемент остается и в одном из двух листьев – например, в левом (примем для определенности).
    3) Включение следующего элемента (3) также вызывает переполнение левого листа: 3, 12,
    20. Элемент из средней позиции перемещается в родительскую вершину, в которой есть свободная позиция, и остается в левом листе
    4) Элемент 5 также должен быть размещен в левом листе – возникает переполнение: 3, 5,
    12. В результате расщепления вершины элемент из средней позиции перемещается в родительскую вершину, в которой возникает переполнение: 5, 12, 20, и сохраняется в левом листе. Переполнение родительской вершины обрабатывается по правилам В- дерева – образуются две вершины с элементами 5 в левой и 20 в правой, а элемент 12 перемещается в родительскую вершину – создается новый корень В+ дерева
    5) Элемент 70 должен быть размещен в самом правом листе – в нем есть свободная позиция, поэтому реорганизация дерева не происходи
    6) Включение последнего элемента (101) вызывает переполнение: 48, 70, 101.
    В результате расщепления вершины появляются два новых листа, элемент 70 сохраняется в левом листе и дублируется в родительской вершине, в которой есть свободная позиция

    31. Правила удаления значения из В+ дерева.
    В+ - дерево – это особый вид сбалансированного m - арного дерева, которое позволяет выполнять операции поиска, вставки и удаления записей из внешнего файла с гарантированной производительностью для самой неблагоприятной ситуации. С формальной точки зрения В+ - дерево порядка m представляет собой m - арное дерево поиска, характеризующееся следующими свойствами:
    • Корень является листом, либо имеет по крайней мере двух сыновей.
    • Каждый узел, за исключением корня и листьев, имеет от (m/2) до m сыновей.
    • Все пути от корня до любого листа имеют одинаковую длину.
    • Указатели на записи файла с данными хранятся только в листьях.
    В+ - дерево можно рассматривать как иерархический индексный файл, каждый узел в котором занимает блок во внешней памяти. Корень В+ - дерева является индексом первого уровня. Каждый внутренний узел в В+ - дереве имеет форму (p0, key1, p1, key2, p2 , . . . ,keyn, pn), где рi является указателем на i - го сына, 0 i n, а keyi – ключ, 1 i n. Ключи в узле упорядочены, поэтому key1 < key2 < . . . < keyn. Все ключи в поддереве, на которые указывает р0, меньше, чем k1. В случае 1 i < n все ключи в поддереве, на которое указывает рi, имеют значения не меньше, чем, keyi, и меньше, чем keyi+1. Все ключи в поддереве, на которое указывает pn, имеют значения, не меньшие, чем keyn.
    1   2   3   4   5   6   7   8   9


    написать администратору сайта