Hash 探测每个R';散列的第四个位置

Hash 探测每个R';散列的第四个位置,hash,probing,Hash,Probing,从我的演讲中我很好奇: 假设我们想要探测函数x mod 10和R=2的每个Rth位置。 现在对4、14、114、1114和11114进行哈希运算: 4将进入槽4 14将首先尝试进入插槽4,但看到它已满,它将进入插槽6,然后(+R) 114将发现插槽4已满,将转到插槽6(+R),但既然已满,它将转到插槽0(+2R) 但对于1114来说,它似乎永远都在继续——不管它走到哪里,它都会跑进一个满槽。这种情况下会发生什么?对于开放寻址哈希表上无法解决的哈希冲突,有三种选择: 使用不同的散列函数重新散列

从我的演讲中我很好奇:

假设我们想要探测函数x mod 10和R=2的每个Rth位置。 现在对4、14、114、1114和11114进行哈希运算:

  • 4将进入槽4
  • 14将首先尝试进入插槽4,但看到它已满,它将进入插槽6,然后(+R)
  • 114将发现插槽4已满,将转到插槽6(+R),但既然已满,它将转到插槽0(+2R)

但对于1114来说,它似乎永远都在继续——不管它走到哪里,它都会跑进一个满槽。这种情况下会发生什么?

对于开放寻址哈希表上无法解决的哈希冲突,有三种选择:

  • 使用不同的散列函数重新散列整个表,希望不会发生新的无法解决的散列冲突
  • 调整表的大小(包括可能发生的所有操作),以保证更多可能的插槽
  • 为无法解决的哈希冲突保留一个单独的列表
  • 这些选择都不是好的

    您应该做的是结合哈希表大小仔细选择探测方法。如果您的表大小是奇数,并且具有相同的恒定步长,那么当表中仍然有空间时,您就不会在这个问题中运行


    常用的组合包括带素数大小哈希表的二次探测,如果表小于半满,则保证插入成功;如果表未满,则保证插入成功。2个大小的哈希表有很多优点,唯一的缺点是它们对哈希算法的质量不宽容。

    使用探测遍历整个表时会发生什么情况取决于算法的定义方式,但通常会有一个冲突存储桶的值链表。