首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ArrayList和Hash表中删除的大O中的不一致?

从ArrayList和Hash表中删除的大O中的不一致?
EN

Stack Overflow用户
提问于 2013-12-11 08:44:41
回答 3查看 960关注 0票数 2

我在看本网站,它列出了各种操作的大O复杂性。对于动态数组,删除复杂度为O(n),而对于哈希表,则为O(1)。

对于像ArrayLists这样的动态数组是O(n),这意味着必须从中心移除一些值,然后将每个索引移到一个上,以保持数据块的连续性。因为如果我们只是删除存储在索引k处的值而不是移位,那么它就是O(1)。

但是在具有线性探测的哈希表中,删除是一回事,您只需通过Hash函数运行您的值,转到保存数据的Dynamic,并删除存储在其中的值。

那么,为什么哈希表获得O(1)信用,而动态数组获得O(n)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-11 08:51:43

这是解释这里。关键是每个动态数组的值数保持在一个恒定值以下。

编辑:正如杜克林所指出的,我的回答解释了为什么有单独链接的哈希表具有O(1)删除复杂性。我要补充的是,在您正在查看的网站上,哈希表被认为具有O(1)删除复杂性,因为它们分析具有单独链接而不是线性探测的哈希表。

票数 4
EN

Stack Overflow用户

发布于 2013-12-11 08:48:02

哈希表的要点是,它们保持接近最佳情况,其中最好的情况意味着每个桶只有一个条目。显然,您可以接受从桶中删除唯一条目需要O(1)时间。

票数 1
EN

Stack Overflow用户

发布于 2013-12-11 09:03:25

当有许多散列冲突时,您当然需要在使用线性探测时进行大量的移位。

但是哈希表的复杂性是在简单均匀散列假设下进行的,这意味着它假定哈希冲突的数量最少。

当发生这种情况时,我们只需要删除一些值,并移动没有值或少量(本质上是恒定的)值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20514419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档