【问题标题】:Resolving second case collisions using Double Hashing使用双散列解决第二种情况的冲突
【发布时间】:2017-03-14 01:48:24
【问题描述】:

当提供第二个碰撞案例时,如何解决?

IE:

假设我们有一个数字数组:

[22、1、13、11、24、-1、-1、-1、-1、-1、-1]

其中-1表示数组中的空......

如果我们尝试使用

插入 33
h1(key) = key % 11
h2(key) = 7 - (key % 7)

传入 33 将得到 2,其中数组位置 2 已被占用(有 13 个)。我们如何处理这种碰撞情况?我们是否再次将返回的 mod 值传递给 h2 ?我们替换值@那个数组值吗? (我怀疑后者并非如此。)

编辑:在 h2 中添加括号

【问题讨论】:

  • 您尝试过Wikipedia article 吗?概述了多种可能性。如果还有问题,请比这更具体。

标签: data-structures hash hashtable collision double-hashing


【解决方案1】:

使用双重哈希,您可以将位置计算为:

pos = (h1 + i * h2) mod table_size

这里的技巧是增加i,直到在哈希表中找到一个空位置。因此,计算不仅进行一次,而且多次进行,直到找到一个槽。详情请见Wikipedia article

还有其他类似于双重哈希的开放寻址形式也非常有效,例如cuckoo hashingrobin-hood hashing

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多