Почему мы не используем 2-3 или 2-3-4-5 деревьев?

У меня есть основное представление о том, как 2-3-4 дерева поддерживать операцию баланса баланса по высоте после операции, чтобы убедиться, что даже самый худший случай операциями являются O (n logn).

Но я не понимаю этого достаточно хорошо, чтобы знать, почему только 2-3-4?

Почему не 2-3 или 2-3-4-5 и т.д.

7
задан Lazer 07 янв. '12 в 1:54
источник поделиться
2 ответов

Для реализации 2-3-4 деревьев обычно требуется либо несколько классов (2NODE, 3NODE, 4NODE), либо у вас есть только NODE, у которого есть массив элементов. В случае нескольких классов вы тратите много времени на создание и уничтожение экземпляров NODE и их повторное рассмотрение громоздко. Если вы используете один класс с массивами для хранения элементов и дочерних элементов, вы либо постоянно изменяете размеры массивов, что также расточительно, либо вы теряете половину своей памяти на неиспользуемых элементах массива. Это не очень эффективно по сравнению с красно-черными деревьями.

Красно-черные деревья имеют только один тип структуры NODE. Поскольку деревья Red-Black имеют двойственность с 2-3-4 деревьями, деревья RB могут использовать те же самые алгоритмы, что и 2-3-4 дерева (нет необходимости в тупо запутывающих/сложных реализациях, описанных в Cormen, Leiserson and Rivest, которые привели к деревьям АА, которые не менее сложны, чем алгоритм 2-3-4.)

Итак, красно-черные деревья для простоты реализации плюс их эффективность памяти/ЦП. (Деревья AVL тоже хороши. Они производят более сбалансированные деревья и глупые просто для кодирования, но они, как правило, менее эффективны из-за слишком часто работы, чтобы поддерживать только немного более компактное дерево.)

О, и 2-3-4-5-6... и т.д. не делаются, потому что ничего не получается. 2-3-4 имеет чистый прирост на 2-3 дерева, потому что они могут быть легко выполнены без рекурсии (рекурсия имеет тенденцию быть менее эффективной, особенно если она не может быть закодирована хвостом-рекурсивно). Тем не менее, B-деревья и Bplus-Trees в значительной степени составляют 2-3-4-5-6-7-8-9-etc деревья, где максимальный размер узлов n выбирается так, чтобы n записей можно было сохранить в один сектор диска. (т.е. каждый сектор диска представляет собой NODE в дереве, а размер сектора эквивалентен количеству элементов, хранящихся в node.) Это связано с тем, что время для поиска по 512 записей линейно в памяти все еще MUCH быстрее, чем пересечение уровня в дереве, для которого требуется другой поиск/выборка диска. и O (512) все еще O (1) и, таким образом, поддерживает O (lg n) для дерева.

12
ответ дан Jeff Wiegley 12 июня '12 в 4:28
источник поделиться

Честно говоря, я не знал о 2-3-4 деревьях. В моем классе Data Structures нас учили 2-3 деревьям, и, честно говоря, большинство из нас внедряло деревья AVL для мокрой части упражнения.

Но, судя по всему, существует обобщение этого типа дерева: (a, b) tree.

1
ответ дан cha0site 07 янв. '12 в 2:00
источник поделиться

Другие вопросы по меткам