Я пропустил замечание: использование идеальной обратимой хеш-функции не является подходом к структуре данных. Это на самом деле алгоритмический подход, обеспечивающий вычисление значения от ключа и от значения до ключа за один раз.
от вопрос уже есть ответ здесь:
Двухсторонняя / обратная карта 13 ответовЯ часто имею дело с отображениями, которыеинъективны, В терминологии программирования это можно выразить в виде словаря, в котором все значения являются уникальными, а также, конечно, все ключи.
Существует ли структура данных с эффективным использованием памяти для инъективных отображений со всеми свойствами сложности времени, которые вы ожидаете от словарей?
Например:
d = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
d.get(2) = 'b' # this works with a normal dictionary
d.get('b', reverse=True) = 2 # but this is not possible
Все решения вДвухсторонняя / обратная карта По-видимому, требуется использовать или комбинировать два набора отображений, уделяя особое внимание упрощению выполнения операций на двусторонней карте. Это хорошо для небольших словарей, которые аккуратно помещаются в памяти, но не подходят для больших словарей.
Требование состоит в том, что не должно быть никаких дополнительных затрат памяти для хранения инъективной двусторонней карты по сравнению с обычным словарем, хранящим только односторонние отображения.
Я понимаю, что словари используют хеш-таблицу, в которой используется тип данных ассоциативного массива. По определению ассоциативные массивы реализуют сопоставления ключ -> значение с уникальными ключами. Возможно ли теоретически или на практике создать интеллектуальное инъективное отображение, которое позволяет осуществлять обратный поиск?
Если этоне Возможно, я был бы признателен за объяснение, почему такую конструкцию трудно или невозможно реализовать с той же эффективностью, что и словари.
Обновить
После обсуждения с @rpy (см. Комментарии ниже) будет полезна любая информация о том, как настроить словарный объект Python с использованием совершенной обратимой хеш-функции. Но, конечно, рабочая реализация была бы идеальной (я уже пробовалсовершенство).