将随机整数插入散列表(java)

时间:2014-11-18 21:28:25

标签: java hash linear quadratic probing

首先,这是一个家庭作业问题。没有找到完整的答案,只是一些帮助。

数据结构&我现在采用的算法类是很多笔和纸理解算法如何工作,但实际编码很少。我是一个编程菜鸟,所以这对你们中的一些人来说可能是一个愚蠢的问题。

从概念上讲,我理解散列和不同方法的原因,但我对如何编码这个分配感到迷茫。

基本上我们可以使用我们想要的任何源代码。本书中的代码为http://users.cis.fiu.edu/~weiss/dsaajava3/code/SeparateChainingHashTable.javahttp://users.cis.fiu.edu/~weiss/dsaajava3/code/QuadraticProbingHashTable.java

使用这些代码中的任何一个时,我似乎无法将密钥插入表中。我正在使用此块来插入:

Random randomGenerator = new Random();
int randomInt = randomGenerator.nextInt(99999);
for (int i = 0; i < 100; i++) {
    H.insert(""+randomInt);
}

这似乎并没有在表格中插入任何内容,但是,尽管插入量很大,但大小仍保持不变。 另外,我不知道如何确定需要多少探针。

我是否完全错了?我觉得我很......

1 个答案:

答案 0 :(得分:1)

Random randomGenerator = new Random();

for (int i = 0; i < 100; i++) {
    int randomInt = randomGenerator.nextInt(99999);
    H.insert(""+randomInt);
}

试试这个,你在一个不好的地方有一条线。

我的探测案例:

/**
     * Method that performs quadratic probing resolution.
     * @param x the item to search for.
     * @return the position where the search terminates.
     */
    private int findPos( 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;
    }

如果我正确理解: 这种方法正在进行探测,是吗?因此,您必须计算在两个选项中调用此方法的次数:重复,而不是重复。如果添加了当前元素并且两个整数,则使用一些标志。在此方法中,添加if以检查标志并增加一个计数器。您将拥有多个探测器。

编辑:

  

[LIN-np]:使用非素数表大小1000 [LIN-p]进行线性探测:   使用素数表大小1019进行线性探测。注意1019是   minPrime(1000),即大于1000的最小素数。   [QDR-p]:使用素数表大小1019 [DBL-p]进行二次探测:   具有主表大小1019和冲突分辨率的双重散列   在素数97上散列。

您必须使用HashTable,它使用探测并测试探测量(平均值)。您在public class QuadraticProbingHashTable<AnyType>中有二次探测算法。并且您必须将哈希表长度设置为1019.在第一个练习中,您必须使用线性探测。因此,当您开始添加元素时,基本上您必须使用具有指定前提条件的HashTable。

这是linear probing algorithm

这是double hash alhorithm

您必须在哈希表中实现此功能并检查它的使用次数。我认为它会以某种方式显示它产生的碰撞次数。快乐的编码。完成二次算法,只需要设置前置条件)(硬编码起始值为1019)。