私はよく単射の写像を扱います。プログラミング用語では、これは、すべての値と、もちろんすべてのキーが一意である辞書として表現できます。
辞書から期待されるすべての時間の複雑さのプロパティを備えた単射マッピング用のメモリ効率の高いデータ構造はありますか?
例えば:
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
Two way/reverse mapのすべてのソリューションは、双方向マップで操作を実行しやすくすることに重点を置いて、2 セットのマッピングを使用または結合する必要があるようです。これは、メモリにきちんと収まる小さな辞書には適していますが、大きな辞書には適していません。
要件は、一方向マッピングのみを格納する通常のディクショナリに対して、単射双方向マップを格納する追加のメモリ オーバーヘッドがないことです。
辞書は、連想配列データ型を使用するハッシュ テーブルを使用することを理解しています。定義上、連想配列は一意のキーを使用してキー -> 値のマッピングを実装します。理論的または実際に、逆引きを可能にするスマートな単射マッピングを生成することは可能ですか?
不可能な場合は、辞書と同じ効率でそのような構成を実装することが難しい、または不可能である理由を説明していただければ幸いです。
アップデート
@rpy との議論に続いて (以下のコメントを参照)、完全な可逆ハッシュ関数を使用して Python 辞書のようなオブジェクトを設定する方法に関する情報は役に立ちます。しかし、もちろん、機能する実装が理想的です (私はすでに完全に試しました)。