【问题标题】:Best data structure for implementing an immutable map实现不可变映射的最佳数据结构
【发布时间】:2022-02-27 18:36:04
【问题描述】:

假设你有一个这样的接口(Java 示例):

interface ImmutableMap<K,V> {
   V get(K key);
}

实现它的一种方法是使用哈希表 (HashMap),假设哈希函数良好,它的平均性能为 O(1),最坏的情况为 O(n)。

但是哈希表是可变的 - 它还允许在映射中删除和放置元素 - 这可能意味着为了使 putdelete 更快,get 的性能正在做出妥协。

所以问题是 - 仅实现 get 可以做出哪些改进 - 可能是 O(1) 最坏情况,或者只是更好的一般性能(例如 2 倍),如果不是渐近更快?

【问题讨论】:

标签: algorithm data-structures hashmap hashtable computer-science


【解决方案1】:

在最坏的情况下,使用 cuckoo 散列的散列表在查找中最多可保证一次未命中(对于散列表中存在的项目)和最多两次未命中(对于散列表中不存在的项目)。权衡是插入稍微慢一些,但仍然与常规哈希表插入相同的复杂性。虽然最坏的情况可以保证 O(1),但由于缓存相关的原因,平均查找速度仍然比线性探测慢 20%-30%(参考:https://en.wikipedia.org/wiki/Cuckoo_hashing)。

【讨论】:

    猜你喜欢
    • 2014-03-21
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多