Как этот метод хеширования является квадратичным?
У меня проблема с различием между квадратичным и линейным алгоритмами зондирования. Когда я читаю концептуальные объяснения, я вижу, что я ^2 неоднократно добавлялся в последний использованный индекс. Как это так здесь? Во что изменит это линейное зондирование? Из того, что я читаю, метод ниже реализует квадратичное зондирование.
private int findPosQuadratic( AnyType x )
{
int offset = 1;
int currentPos = myhash( x );
while( array[ currentPos ] != null &&
!array[ currentPos ].element.equals( x ) )
{
currentPos += offset; // Compute ith probe
offset += 2;
if( currentPos >= array.length )
currentPos -= array.length;
}
return currentPos;
}
1 ответ
Решение
Сгенерированные здесь индексы:
H // offset : 1
H + 1 // offset : 3
H + 4 // offset : 5
H + 9 // offset : 7
.
.
.
поскольку n ^ 2 = 1 + 3 + 5 + ... + (n * 2 - 1)
это на самом деле функция H(n) = H + n ^ 2
Так что это квадратичное зондирование.