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

哈希表中的冲突和探测长度有什么区别?如何追踪他们?

邵君植
2023-03-14

大家好,我是Python新手,我实现了一个哈希表类,它通过线性探测解决冲突。

现在我正在尝试编写一个函数来跟踪碰撞次数和探针长度。我已经编写了函数来跟踪碰撞次数,但是我不知道如何跟踪探针长度,因为我认为它们是相同的?

def getCollisionAndProbeLength(self, key, value):
    position = self.hash_value(key)
    collision=0
    probeLength=0

    for i in range(self.table_size):
        if self.array[position] is None || self.array[position][0]==key && self.array[position][1]==value :#correct item or collision resolved
            break
        elif self.array[position][0]==key && self.array[position][1]!=value:
            collision+=1
            position = (position+1) % self.table_size
 return [collision,probeLength]

编辑:好的,显然冲突意味着哈希(键)给定的位置已经被占用。探针长度是指在找到一个位置(在开放寻址中)之前,你要做多少次尝试。

所以我猜应该是这样:

 elif self.array[position][0]==key && self.array[position][1]!=value:
            collision+=1
            probeLength=collision-1
            position = (position+1) % self.table_size

共有1个答案

郎鹤龄
2023-03-14

显然,碰撞意味着哈希(键)给出的位置已经被占用。探测长度是在那之后你做了多少次尝试,直到你找到一个位置(在开放寻址中)。

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

  • 这是一个类似于线性探测运行时的问题,但它涉及二次探测。 对我来说,“理论上最坏的情况是O(n)”对于线性探测是有意义的,因为在最坏的情况下,你可能需要遍历每个桶(n个桶) 二次探测的运行时是什么?我知道二次探测-1, 4, 9, 16,......我最初的想法是这是对数n(指数)的一些变化,但没有一致的基数。

  • 为了更好地理解散列,我查看了这个StackOverflow答案,并看到了以下内容(关于我们需要在恒定时间内获得桶大小的事实): 如果使用线性探测或双重散列,查找散列到相同值的所有项意味着需要对值进行散列,然后遍历表中非空项的“链”,以查找散列到相同值的项的数量。这与散列到相同值的项数不是线性的,而是与散列到相同值或冲突值的项数成线性的。 这意味着它“在散列到相同或冲突值的项目数量上是线性的”吗?它

  • 问题内容: HashMap中的Hash Collision或Hashing Collision并不是一个新话题,我遇到了多个博客和讨论区,解释了如何产生Hash Collision或如何以模棱两可和详细的方式避免它。我最近在一次采访中遇到了这个问题。我有很多事情要解释,但我认为准确地给出正确的解释真的很困难。抱歉,如果我在这里重复我的问题,请给我准确的答案: 哈希冲突到底是什么?它是一项功能或常见

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

  • 我试图故意制造碰撞。 所以,我有和对象。我已经覆盖了Country的和方法,以便: india.hash代码()==india2.hash代码() 根据JavaHashMap中的冲突解决方案和文章“让这个国家对象在hashmap中”的一部分,如果key1的结果等于key2上的相同操作,那么应该会有冲突。 所以,我放置断点来查看的内容,并查看它的是2。也就是说,它包含两个不同的条目,并且没有link