Порядок б-деревьев - PullRequest
       38

Порядок б-деревьев

5 голосов
/ 13 мая 2011

Я готовлюсь к экзамену и приехал на B-деревьях. Википедия описывает B-дерево как дерево, в котором узлы имеют не менее d и не более 2d ключей и, следовательно, не более 2d + 1 листьев. Например, если d = 1, у него будет максимум 2 ключа и 3 дочерних элемента, что делает его деревом 2-3. Однако это не позволит, например, 2-3-4 дерева, если я не ошибаюсь.

Однако наш материал описывает b-дерево как дерево, в котором каждый узел имеет не менее t> = 2 ключей t-1 и максимум 2t-1 ключей. Это будет означать, что узлы имеют нечетное количество ключей и четное число дочерних элементов. Например, t = 2 будет иметь от 1 до 3 ключей и до 4 дочерних, что делает его деревом 2-3-4. С другой стороны, не может быть 2-3 дерева с таким обозначением.

Вдобавок к этому, Кнут имеет обозначение, где d будет означать максимальное количество дочерних элементов в узле. Это обозначение допускает как четное, так и нечетное число детей, что позволяет использовать как 2-3 дерева, так и 2-3-4 дерева.

Я знаю, что существуют 2-3 дерева и 2-3-4 дерева.

Какая реальная запись? Есть ли реальная запись? В качестве дополнительного вопроса; Каково максимальное количество ключей в дереве размера h?

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

Если вы внимательно прочитаете статью в вики, вы увидите, что есть два основных варианта B-деревьев (исключая структурные варианты, такие как B * и B +), один с ключами t -> 2t, и один с t -> 2t+1 клавишами.

Переводя эти варианты в #children, у нас есть один с t+1 -> 2t+1 children и один с t+1 -> 2t+2 children.

Таким образом, по существу, чтобы ответить на ваш вопрос, 2-3 дерева и 2-3-4 дерева являются допустимыми деревьями, каждое в соответствии со своим вариантом / определением:

2-3 относится к первому виду (t+1 -> 2t+1 детей, где t = 1)

2-3-4 относится ко второму виду (t+1 -> 2t+2 детей, где t = 1)

Действительность обоих вариантов проистекает из того факта, что допустимы как разбиения, так и слияния (действия, выполняемые при удалении и вставке из / в ADT):

t -> 2t:

Split. Происходит, когда мы добавляем новый элемент, а у узла больше максимального количества ключей 2t Таким образом, у нас есть ключи 2t+1, мы разделяем узел на два узла и помещаем один элемент в родительский элемент, оставляя ключи 2t в двух дочерних элементах и ​​ключи t в каждом дочернем элементе. Это приемлемо, потому что минимальное количество ключей в узле действительно t.

Объединить. Происходит, когда мы удаляем ключ, а узел содержит меньше минимального числа, t, и его родной брат тоже минимален. Таким образом, у нас есть t-1 + t ключи в нашем новом объединенном узле, результирующий узел должен быть действительным: t-1 + t = 2t-1 <= 2t. Отлично.

То же самое с t -> 2t+1:

Split. 2t+2 становится t и t+1, что в порядке.

Объединить. t-1 + t = 2t-1 <= 2t+1

Конечно, нет разницы во времени выполнения, это просто небольшое различие в реализации, имеющее небольшую теоретическую важность (вы можете немного оптимизировать некоторые алгоритмы с помощью первого варианта, но не настолько, чтобы это изменило сложности во время выполнения).

1 голос
/ 13 мая 2011

поиск в google scholar для b tree comer => Вездесущий B-Tree, Comer, 1979

Это наиболее цитируемая статья, которую вы найдете в документах по структуре данных. Эта статья подробно описывает дерево b (как оно работает, сложность и варианты ...). Там вы должны найти свой ответ.

Надеюсь, это поможет

p.s. приведите этот документ на экзамене, если вы используете формулу, отличную от указанной: P

...