Я пропустил замечание: использование идеальной обратимой хеш-функции не является подходом к структуре данных. Это на самом деле алгоритмический подход, обеспечивающий вычисление значения от ключа и от значения до ключа за один раз.

от вопрос уже есть ответ здесь:

Двухсторонняя / обратная карта 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 с использованием совершенной обратимой хеш-функции. Но, конечно, рабочая реализация была бы идеальной (я уже пробовалсовершенство).

Ответы на вопрос(1)

Ваш ответ на вопрос