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

具有链接搜索时间的哈希表?

滑畅
2023-03-14

如果我实现一个哈希表,我理解插入是在恒定的时间内完成的。我也明白,如果没有碰撞,我可以在不变的时间内找到物品。然而,如果我插入一个项目,并在任意索引中使用链表链接它,它最终在位置2,但它在列表下链接了3个链接,这是O(n)时间,进行搜索吗?

共有1个答案

薄瑞
2023-03-14

这是对O(n)时间的误解。Big-O分析与一般情况有关,而不是特定的实例。凭直觉,假设您的哈希表在一段时间内进行了数千次或数百万次查找,然后退一步,判断它是否正在执行哈希表应该执行的操作。

如果您有一个完全退化的哈希表,它将所有内容散列到同一个槽中,那么您将有O(n)的查找性能。

如果n>>m,其中n是存储的元素数,m是哈希表的大小,那么哈希表查找性能将下降到O(n)。

一般而言,散列表的性能与平均链长有关。如果这个平均值是一个(小的)常数,使得它不是n的函数,则您具有所需的O(1)查找性能。

 类似资料:
  • 我刚刚开始学习哈希表,我知道如何插入,但不知道如何搜索。以下是我将基于这个问题的算法: 散列密钥 线性探测碰撞分辨率。 假设我用键1、11和21调用两次插入。这将返回所有3个键的槽1。冲突解决后,表在槽1、2和3处将有值1、11和21。这就是我对插入的理解。 完成此操作后,如果搜索键11和21,我将如何获得插槽2和3?从我所读到的内容来看,搜索哈希表应该做与插入完全相同的事情,除非当你到达所需的插

  • 问题内容: 我的正则表达式 较弱 ,仅当请求是从外部链接传入时,我才需要将任何 FileName.htm 或 FileName.html 页面请求重定向到 ./#FileName 。这些文件都将驻留在根目录中。 这是我到目前为止所拥有的。它给我错误:( 第一行 确保仅索引文件不被重定向。 如果请求来自未知引荐来源 , 则第二行 不重定向。 第三行将 我的域排除在重定向规则之外。 第四行将其 重定向

  • 关于哈希表的快速问题。我目前正在实现一个哈希表,它结合使用单独的链接和开放寻址,将每个bucket的链表长度限制在一定的长度。 然而,我很难想出一种使用这种哈希表结构高效地获取/删除数据的方法,我想知道我是在盲目地愚蠢,还是以前有人遇到过类似的问题。 如果我尝试使用冲突解决方案不断地进行探测,我可能永远都不会发现密钥是否不在表中。这是因为大多数探测方法不会覆盖每一个桶,我宁愿不使用线性探测。 因为

  • 我有一个linkedHashMap,键是一个整数,值是一个对象。相反,我需要最终的哈希映射有一个字符串键。示例: 我有一个枚举,每个int都映射到某个角色。但是,如何将链接哈希映射的键更改为该字符串角色而不是它的整数值?我可以循环访问链接的哈希图来重命名密钥吗?

  • 问题内容: 我将使用密码+ salt 来运行,但是我不知道在设置MySQL数据库时需要花费多长时间。好的长度是多少? 问题答案: sha256长256位-顾名思义。 由于sha256返回一个十六进制表示,所以4个位足以编码每个字符(而不是8个,如ASCII),因此256个位将表示64个十六进制字符,因此您需要a 或什至a ,因为长度始终相同,完全没有变化。 和演示: 会给你 : 即一个包含64个字

  • 问题内容: 当我们使用a 来存储数据时,据说搜索需要o(1)时间。我很困惑,有人可以解释吗? 问题答案: 好吧,这 只是 个谎言-可能需要更长的时间,但通常不会。 基本上,哈希表是一个包含所有要搜索的键的数组。每个键在数组中的位置由 哈希函数 确定, 哈希函数 可以是始终将同一输入映射到同一输出的任何函数。我们将假设哈希函数为O(1)。 因此,当我们在哈希表中插入内容时,我们使用哈希函数(将其称为