Создайте свое собственное b-дерево в оперативной памяти.
Использование памяти:
(4 байта) сравнительного хеш-значения
(4 байта) индекс следующего листа, если хеш <= сравнение ИЛИ, если отрицательный индекс значения </p>
(4 байта) индекс следующего листа, если хэш> сравнение ИЛИ, если отрицательный индекс значения
12 байт на узел b-дерева для b-дерева. Дополнительные издержки для значений (см. Ниже).
Как вы структурируете это в Python - не существует ли «нативных массивов» 32-битных целых чисел, практически без дополнительных затрат памяти…? как они называются ... в любом случае те.
Отдельный упорядоченный массив подмассивов, каждый из которых содержит одно или несколько значений. Приведенные выше «индексы значений» являются индексами в этом большом массиве, что позволяет извлекать все значения, соответствующие хешу.
Это предполагает 32-битный хэш. Вам понадобится больше байтов на узел b-дерева, если у вас есть
больше 2 ^ 31-1 записей или больший хэш.
НО Спаннер в работах возможно: Обратите внимание, что вы не сможете, если вы не сохраняете значения ключей, проверить, что искомое значение хеша соответствует только вашему ключу, если только через какой-то алгоритмический или организационный механизм вы гарантировали что никакие два ключа не будут иметь одинаковый хеш. Довольно серьезная проблема здесь. Вы рассматривали это? :)