栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

散列如何具有o(1)搜索时间?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

散列如何具有o(1)搜索时间?

好吧,这 只是 个谎言-可能需要更长的时间,但通常不会。

基本上,哈希表是一个包含所有要搜索的键的数组。每个键在数组中的位置由 哈希函数 确定, 哈希函数
可以是始终将同一输入映射到同一输出的任何函数。我们将假设哈希函数为O(1)。

因此,当我们在哈希表中插入内容时,我们使用哈希函数(将其称为 h
)来查找将其放置在何处并将其放置在其中。现在,我们插入另一件事,即哈希和存储。还有一个。每次插入数据时,都需要O(1)的时间来插入数据(因为哈希函数是O(1))。

查找数据是相同的。如果我们想找到一个值 x ,我们只需要找出 h (x)即可告诉我们 x
在哈希表中的位置。因此,我们也可以在O(1)中查找任何哈希值。

现在说谎:上面是一个很好的理论,但有一个问题:如果我们插入数据并且在数组的那个位置已经有东西该怎么办?没有什么可以保证哈希函数不会为两个不同的输入产生相同的输出(除非您具有完善的哈希函数,但是要产生这些棘手的代码)。因此,在插入时,我们需要采取以下两种策略之一:

  • 在数组的每个位置存储多个值(例如,每个数组插槽都有一个链表)。现在,当您执行查找时,到达数组中的正确位置仍为O(1),但可能会在(希望较短的)链表中进行线性搜索。这称为“单独链接”。
  • 如果发现已经有东西,请再次哈希并找到另一个位置。重复直到找到一个空白点,然后将其放在那里。查找过程可以遵循相同的规则来查找数据。现在它仍然是O(1)才能到达第一个位置,但是有一个潜在的(希望很短的)线性搜索可以在表格周围反弹,直到找到需要的数据为止。这称为“开放式寻址”。

基本上,这两种方法仍 大多为
O(1),但线性序列希望较短。我们可以为大多数目的假设它是O(1)。如果哈希表变得太满,那些线性搜索可能会变得越来越长,然后是时候进行“重新哈希”了,这意味着创建一个更大的新哈希表并将所有数据重新插入其中。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497411.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号