【问题标题】:how is this hash probing method quadratic?这种哈希探测方法是如何二次的?
【发布时间】:2013-05-03 19:15:17
【问题描述】:

我在区分二次和线性探测算法时遇到问题。当我阅读概念性解释时,我看到 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;
}

【问题讨论】:

    标签: java hashmap quadratic-probing


    【解决方案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,所以是二次探查。

    【讨论】:

    • 我会改变什么让它成为线性的?删除offset += 2 ?
    • 是的,因为它会变成 H(n) = H + n
    猜你喜欢
    • 2012-08-20
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 2018-10-30
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多