我经常处理单射的映射。在编程术语中,这可以表示为一个字典,其中所有值都是唯一的,当然,所有键也是唯一的。
单射映射是否具有内存高效的数据结构,具有您期望从字典中获得的所有时间复杂性属性?
例如:
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中的所有解决方案似乎都需要使用或组合两组映射,重点是使在双向映射上执行操作更容易。这对于完全适合内存的小型词典来说很好,但对于大型词典来说却不是很好。
要求是存储单向双向映射与仅存储单向映射的常规字典相比,不应有额外的内存开销。
我了解字典使用哈希表,它使用关联数组数据类型。根据定义,关联数组使用唯一键实现键 -> 值映射。理论上或实际上是否有可能产生一个允许反向查找的智能单射映射?
如果不可能,我会很感激解释为什么这样的结构很难或不可能以与字典相同的效率实现。
更新
在与@rpy 讨论之后(请参阅下面的评论),有关如何使用完美的可逆哈希函数设置类似 python 字典的对象的任何信息都会很有用。但是,当然,一个可行的实现将是理想的(我已经尝试过完美)。