当前位置: 首页 > 知识库问答 >
问题:

线性探测哈希表中数组M的大小应该有多大?

齐英耀
2023-03-14

我试图理解使用Java实现的线性探测哈希表。然而,我对理解为什么M的初始值为30001感到失望。下面给出了代码的框架。

    public class LinearProbingHashTable<Key, Value>{
      private int M = 30001;
      private Value[] vals = (Value[]) new Object[M];
      private Key[] keys = (Key[]) new Object[M];

      private int hash(Key key){...}
      public void put(Key key, Value val){...}
      public Value get(Key key){...}
    }

我的问题是为什么M在这里被初始化为30001。这是经验法则吗?初始化线性探测哈希表时,我应该如何确定M的大小?

共有1个答案

邹玮
2023-03-14

为了更好地理解这一点,您必须知道这部分代码的作用。也许,或者可能,键在[0,30000]以内。

进一步阅读:

>

  • [1] [2]选择合适的哈希表大小对该方法的成功很重要。例如,HashTableSize为2时,将为偶数键生成偶数哈希值,为奇数键生成奇数哈希值。这是一个不受欢迎的属性,因为如果碰巧是偶数,所有键都会散列到相同的值。如果HashTableSize是二的幂,那么hash函数只需选择关键位的子集作为表索引。为了获得更随机的散射,HashTableSize应该是一个不太接近二次幂的素数。

    查看[3]了解如何为哈希选择合适的表大小。

  •  类似资料:
    • 我正在用一个字符串数组单维和一个2维int数组制作哈希表。我正在使用线性探测进行冲突检测,当我意识到如果检测到冲突,单词的hashCode将不再是索引时,我真的很兴奋地完成了这个程序。我该如何保存该索引以备以后使用?

    • 小明的通讯录 小明上中学了,为了方便和家里以及同学联系,爸爸终于给小明买了一台手机。该手机的存储容量可以扩充,因此,可以存储的电话号码数量没有限制。 小明的手机有一个特殊的功能,对于打进或拨出的电话,只要是新号码,手机均会自动进行储存。 给定小明在一个月的使用期间的手机通讯记录,请给出此时此刻小明的手机中存储了多少个电话号码。 输入格式: 本题只有一组测试数据。第一行先输入一个整数N( N不超过1

    • 我试图解决这个问题,我需要实现线性探测。 给定一个整数数组和一个哈希表大小。使用线性探测将数组元素填充到哈希表中以处理冲突。 例1: 例2: 您的任务: 您不需要读取输入或打印任何内容。 您的任务是完成函数linearProbing(),该函数将空哈希表(hash)、哈希表大小(hashSize)、整数数组arr[]及其大小N作为输入,并将数组arr[]的所有元素插入给定的哈希表中。 哈希表的空单

    • 我在研究hackerearth上的哈希表,在那里我遇到了用线性探测实现哈希表的代码。我对这段代码有两个疑问:- 1)为什么他们声明大小为21(而不是大小为20)的hashTable最多容纳20个元素? 2) 在Insert函数中,当循环无限运行时,如果在连续迭代之后,索引的值变为索引的初始值,不是吗? 链接至黑客主页:-https://www.hackerearth.com/practice/da

    • 线性探测(哈希表)有一件事对我来说并不直观。如果我把散列结果的key1放到数组索引1中。然后我放了钥匙2- 或者,我们的散列函数(如果写得足够好的话)在索引中平均分配键,并且我们不断调整数组的大小,使其最大半满,这就减轻了这种情况?

    • 我在做一个程序,比较哈希表中线性探测、二次探测和单独链接所需的平均访问量和最大访问量。 我已经做了三个案例的元素插入部分。当从哈希表中找到元素时,我需要有一个结束搜索的限制。在单独链接的情况下,当下一个指针为空时,我可以停止。对于线性探测,当探测到整个表时,我可以停止(即表的大小)。在二次探测中,我应该用什么作为限制?表大小可以吗? 我的二次探测函数是这样的 其中i从0到无穷大。请帮帮我...