java - 这个散列探测方法是如何二次的?

标签 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;
}

最佳答案

这里生成的索引是:

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,所以它是二次探测。

关于java - 这个散列探测方法是如何二次的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16366040/

相关文章:

java - 打开终端窗口客户端

java - 如何检查是否在特定时限内收到蓝牙响应?

java - 与 Map 的键相交的列表

java - 如果两个不同的对象具有相同的哈希码会怎样?

java - 使用二次探测调整 HashMap 的大小(支持数组实现)

java - 帮助处理 Java 中的哈希表和二次探测

java - 在 session 中存储数据,如何以及何时检测数据是否过时

java - Java Map 键的奇怪输出

arrays - 从Dart map 迭代和提取键/值的最佳方法?

c - 从线性探测到二次探测(哈希冲突)