关于哈希 - 二次探测证明

时间:2018-01-24 09:07:24

标签: algorithm data-structures hash hashmap hashtable

我正在研究用于散列的冲突解决方法,尤其是在开放寻址(例如线性探测,二次探测)中。线性探测很容易理解,因为它引用了类似的东西,

index = hash(value)
for i, 0 -> SIZE
   seek_index = (index + i) % SIZE
   if map[seek_index] is EMPTY
      //proceed insertion

但对于二次探测,我想知道直到我需要搜索空槽?

index = hash(value)
for i, 0 -> SIZE    // Is it should be up to SIZE ?
   seek_index = (index + i*i) % SIZE
   if map[seek_index] is EMPTY
      //proceed insertion

如果限制是SIZE或其他什么,证明我会在地图中获得EMPTY单元格吗?

任何参考将不胜感激。

1 个答案:

答案 0 :(得分:2)

无法保证您将探测数组中的每个元素。

例如,考虑SIZE=5。然后你将在索引0,1,2,2,2,2,2,4处探测(相对于index),其中(模5)为0,1,4,4,1所以如果空位在索引处2或3(相对于index),那么你将找不到它们。

Squares mod n被称为“二次残差”,and the number of quadratic residues modulo n cannot exceed n/2 + 1 (n even) or (n + 1)/2 (n odd).