Что я должен выбрать для простого в коде сбалансированного бинарного дерева поиска?

Я хотел бы знать, какой сбалансированный BST будет легко кодировать на C++, и при этом его сложность будет примерно равна O(logn).

Я уже пробовал деревья Red Black, но хотел бы найти альтернативу, которая менее сложна для кодирования. Я работал с Treaps в прошлом, но мне интересно изучить варианты, которые либо работают лучше, либо их легче реализовать.

Каковы ваши предложения?

1 ответ

Решение

По моему опыту,деревья AVL работают лучше, чем Treaps, и их не сложнее реализовать.

Они работают, вращая ветви дерева, которые становятся несбалансированными после любой вставки или удаления. Это гарантирует, что у них будет идеальный баланс, чтобы они не могли быть обмануты странными данными.

Вращения в дереве AVL

Treaps, с другой стороны, распределяются случайным образом, что для больших наборов данных близко к сбалансированному, но вы все равно не получите этот идеальный O(logn). Кроме того, вы можете случайно встретить набор данных, который вставляется очень несбалансированным образом, и ваше время доступа может приблизиться к O(n).

Посетите страницу Википедии для получения дополнительной информации: http://en.wikipedia.org/wiki/Avl_tree

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