【发布时间】:2010-07-28 13:00:32
【问题描述】:
我想创建一个数据结构或集合,它在添加、删除和计算 no 时具有 O(1) 的复杂性。的元素。我应该如何开始?
我想到了一个解决方案:我会使用一个 Hashtable 并且对于插入的每个键/值对,我将只有一个哈希码,即:我的哈希码算法每次都会生成一个唯一的哈希值,所以存储值的索引将是唯一的(即没有冲突)。
这会给我 O(1) 复杂度吗?
【问题讨论】:
-
“我的哈希码算法每次都会生成唯一的哈希值”——我想很多人都会有兴趣看到这种哈希码算法的源代码 ;-) 请注意,在现实生活中,你正在将可能无限数量的不同对象映射到有限数量的哈希码,因此碰撞的机会实际上永远不会为 0(某些特殊情况除外)。
-
我有一个独特的哈希算法来存储 32 位整数。哈希(i)==i :)
-
我也知道这样的算法。问题是它需要
O(N)空间:-) -
你提前知道所有可能的键吗?如果你这样做,你可以建立一个完美的哈希。
-
@Constantin,正如斯蒂芬所说。我知道 long 的所有可能值。这是否意味着我可以为 Long 构建一个不冲突的 32 位哈希?
标签: algorithm data-structures collections hash theory