Есть ли модуль для AVL или Red-Black или какой-либо другой тип сбалансированного двоичного дерева в стандартной библиотеке Python? Я попытался найти один, но безуспешно (я относительно новичок в Python).
Стандартная библиотека Python - есть ли модуль для сбалансированного двоичного дерева?
Ответ 1
Нет, в stdlib нет сбалансированного двоичного дерева. Однако из ваших комментариев кажется, что у вас могут быть другие варианты:
- Вы говорите, что хотите использовать BST вместо списка для поиска
O(log n)
. Если поиск - это все, что вам нужно, и ваши данные уже отсортированы, модульbisect
предоставляет алгоритм бинарного поиска для списков. - Mike DeSimone рекомендовал набор и dicts, и вы объяснили, почему списки слишком алгоритмически медленны. Наборы и dicts реализованы как хэш-таблицы, которые имеют O (1) поиск. Решение большинства проблем на Python на самом деле является "использованием dict".
Если ни одно из решений не подходит для вас, вам придется перейти на сторонний модуль или реализовать свои собственные.
Ответ 2
нет ничего подобного в stdlib, насколько я вижу, но быстрый просмотр pypi вызывает несколько альтернатив:
Ответ 3
Было несколько случаев, когда я нашел пакет heapq (в библиотеке stadndard), чтобы быть полезным, особенно если в любой заданной время, в которое вы хотите O (1) получить доступ к наименьшему элементу в вашей коллекции.
Для меня я отслеживал набор таймеров и, как правило, просто интересовался проверкой того, было ли минимальное время (тот, который должен быть выполнен первым) уже готов.
Ответ 4
Появился новый пакет под названием "bintrees", который поддерживает деревья ubalanced, AVL и RB. Вы можете найти здесь здесь.
Ответ 5
Нет, но там AVL Tree Objects для Python (очень старый!) и (закрытый) проект на SourceForge - avl-деревья для Python.
Ответ 6
Проверьте также проект Sorted Containers.
Здесь PyCon говорит об этом: https://www.youtube.com/watch?v=7z2Ki44Vs4E