这个哈希探测方法是如何二次的?

rcj*_*rcj 4 java hashmap quadratic-probing

我在区分二次和线性探测算法时遇到了问题.当我阅读概念性解释时,我看到I ^ 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;
}
Run Code Online (Sandbox Code Playgroud)

zw3*_*324 5

这里生成的索引是:

H // offset : 1

H + 1 // offset : 3

H + 4 // offset : 5

H + 9 // offset : 7

.
.
.
Run Code Online (Sandbox Code Playgroud)

因为n ^ 2 = 1 + 3 + 5 + ... + (n * 2 - 1),这实际上是函数H(n) = H + n ^ 2,所以它是二次探测.