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

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

65
задан aeter 19 February 2010 в 17:06
поделиться

4 ответа

Мы создаем базовый пользовательский AMI со всеми программами, которые, как мы знаем, нам всегда нужны в AMI.

Программное обеспечение, которое мы разрабатываем (и постоянно обновляем), хранится во внешнем месте хранения (мы используем репозиторий Maven, но вы можете использовать все, что хорошо работает с вашей средой.

Затем мы запускаем наш пользовательский AMI со всем необходимым на нем, развертываем последнюю версию нашего программного обеспечения от Maven, и мы готовы идти.

Таким образом, рабочий процесс:

Setup

Создайте пользовательский AMI с помощью материала, который нам всегда понадобится

Containing

Разработка программного обеспечения локально Развертывание двоичных файлов во внешнем месте хранения (в нашем случае репозиторий Maven) При необходимости инициируйте несколько экземпляров пользовательского AMI Копирование двоичных файлов из внешнего места хранения в каждый экземпляр Выполнить для каждого экземпляра

-121--3747437-

Вы должны найти, что следующая схема позволяет то, что вы предложили.

  <xs:element name="foo">
    <xs:complexType>
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:choice>
          <xs:element maxOccurs="unbounded" name="child1" type="xs:unsignedByte" />
          <xs:element maxOccurs="unbounded" name="child2" type="xs:string" />
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

Это позволит вам создать файл, например:

<?xml version="1.0" encoding="utf-8" ?>
<foo>
  <child1>2</child1>
  <child1>3</child1>
  <child2>test</child2>
  <child2>another-test</child2>
</foo>

, который, похоже, соответствует вашему вопросу.

-121--731803-

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

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

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

33
ответ дан 24 November 2019 в 15:32
поделиться

Нет, но есть AVL Tree Objects для Python (очень старый!) И (закрытый) проект на SourceForge - avl-деревья для Python .

2
ответ дан 24 November 2019 в 15:32
поделиться

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

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

9
ответ дан 24 November 2019 в 15:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: