Стандартная библиотека Python - есть ли модуль для сбалансированного двоичного дерева?

Есть ли модуль для AVL или Red-Black или какой-либо другой тип сбалансированного двоичного дерева в стандартной библиотеке Python? Я попытался найти один, но безуспешно (я относительно новичок в Python).

Ответ 1

Нет, в stdlib нет сбалансированного двоичного дерева. Однако из ваших комментариев кажется, что у вас могут быть другие варианты:

  • Вы говорите, что хотите использовать BST вместо списка для поиска O(log n). Если поиск - это все, что вам нужно, и ваши данные уже отсортированы, модуль bisect предоставляет алгоритм бинарного поиска для списков.
  • Mike DeSimone рекомендовал набор и dicts, и вы объяснили, почему списки слишком алгоритмически медленны. Наборы и dicts реализованы как хэш-таблицы, которые имеют O (1) поиск. Решение большинства проблем на Python на самом деле является "использованием dict".

Если ни одно из решений не подходит для вас, вам придется перейти на сторонний модуль или реализовать свои собственные.

Ответ 3

Было несколько случаев, когда я нашел пакет heapq (в библиотеке stadndard), чтобы быть полезным, особенно если в любой заданной время, в которое вы хотите O (1) получить доступ к наименьшему элементу в вашей коллекции.

Для меня я отслеживал набор таймеров и, как правило, просто интересовался проверкой того, было ли минимальное время (тот, который должен быть выполнен первым) уже готов.

Ответ 4

Появился новый пакет под названием "bintrees", который поддерживает деревья ubalanced, AVL и RB. Вы можете найти здесь здесь.