【问题标题】:How to insert random ints into hashing table?如何将随机整数插入哈希表?
【发布时间】:2019-08-07 03:05:31
【问题描述】:

我现在学习的数据结构和算法课程是对算法工作原理的大量纸笔理解,但很少有实际编码。我是一个编程菜鸟,所以这对你们中的一些人来说可能是一个愚蠢的问题。

从概念上讲,我了解散列,以及不同方法的原因,但不知道如何编写此分配。

基本上我们可以使用任何我们想要的源代码。书中的代码是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);
}

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

【问题讨论】:

  • 请注意:由于您在循环外部调用随机生成器,因此您将始终使用相同的数字进行操作。
  • hashing table 到底是什么?好像和Java的HashTable不一样。
  • 是的,我的意思是哈希表。 PM 77,这有帮助,表大小现在是正确的。不幸的是,我仍然不确定如何确定发生的探测数量
  • Java 的HashTable 类既没有定义也没有继承insert 方法。它使用put 添加新数据。向hashtable 添加数据时,需要提供2 个参数:keyvalue
  • 探测数量是什么意思?我认为这个哈希表只是为了制作列表列表,看看它如何通过使用不同的哈希方法将数据划分到单独的单元格中。

标签: java hash quadratic probing


【解决方案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&lt;AnyType&gt; 中有二次探测算法。您必须将哈希表长度设置为 1019。在第一个练习中,您必须使用线性探测。所以基本上你必须在开始添加元素时使用具有指定前提条件的 HashTables。

这是linear probing algorithm

这是double hash alhorithm

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

【讨论】:

  • 什么是H,您怎么知道它支持带有单个String 参数的insert 方法?
  • H 是这个哈希表之一,它们支持插入。
  • 非常感谢,这澄清了一些事情。是时候开始工作了!
  • 哈希图的实现有很多。像 this 并且您只使用 KEYS,值与您无关。
猜你喜欢
  • 1970-01-01
  • 2013-11-15
  • 2016-05-24
  • 2011-11-22
  • 2015-06-25
  • 2017-03-28
  • 1970-01-01
  • 2014-04-05
相关资源
最近更新 更多