Класс Python имеет шесть требований, перечисленных ниже.Только полужирные термины должны читаться как требования.
- Близко к O (1) производительности для стольких из следующих четырех операций.
- Сохранение порядка сортировки при вставке объекта в контейнер.
- Возможность просмотра последнего значения (наибольшее значение), содержащегося в объекте.
- С учетом всплывающих с обеих сторон (получение наименьшего или наибольшего значения).
- Возможность получения общего размера или количества объектов
- Готовое решение , подобное коду в стандартной библиотеке Python.
Что осталось здесь по историческим причинам (помощьлюбопытно и доказать, что исследование было проведено).
Просматривая стандартную библиотеку Python (в частности, раздел о типах данных), я все еще не нашел класс, который удовлетворяет требованиям к требованиям таблицы фрагментации,collections.deque
близко к тому, что требуется, но не поддерживает сортировку содержащихся в нем данных.Он обеспечивает:
- Эффективное добавление и всплытие по обе стороны от deque с производительностью O (1) .
- Попса с обеих сторон для данных, содержащихся в объекте.
- Получение общего размера или количества объектов, содержащихся в нем.
Реализация неэффективного решения с использованием списков будет тривиальной, но найти класс, который хорошо работает, было бы гораздо более желательно.В растущей симуляции памяти без верхнего предела такой класс может хранить индексы пустых (удаленных) ячеек и понижать уровни фрагментации.Модуль bisect
может помочь:
- Помогает сохранять массив в отсортированном порядке при вставке новых объектов в массив.
- Готовое решение для хранения списков, отсортированных по мере добавления объектов.
- Позволит выполнить
array[-1]
до , чтобы просмотреть последнее значение в массиве.
Последний кандидаткоторый не смог полностью удовлетворить требования и оказался наименее многообещающим, был модуль heapq
.Поддерживая то, что выглядело как эффективные вставки, и гарантируя, что array[0]
было наименьшим значением, массив не всегда находится в полностью отсортированном состоянии.Больше ничего не было найдено.
Кто-нибудь знает о классе или структуре данных в Python, которые приближаются к этим шести требованиям?