【发布时间】:2013-12-29 03:32:25
【问题描述】:
我正在查看this website,它列出了各种操作的大 O 复杂性。对于动态数组,删除复杂度是 O(n),而对于 Hash Tables,它是 O(1)。
对于像 ArrayLists 这样的动态数组 O(n),这必须意味着从中心移除一些值然后将每个索引移到一个以保持数据块连续的操作。因为如果我们只是删除存储在索引 k 处的值而不是移动,那就是 O(1)。
但是在线性探测的哈希表中,删除是一样的,你只需通过哈希函数运行你的值,进入保存数据的动态数组,然后删除存储在其中的值。
那么为什么哈希表获得 O(1) 信用,而动态数组获得 O(n)?
【问题讨论】:
-
为什么它们应该是“一致的”?您是否考虑过您的假设不正确的可能性?
-
我建议你删除 java 标签,并提到 ArrayList,如果你真的想用 language-agnostic 替换它,但 data-structures 也可以,除非这个问题是专门关于Java API 的哈希表实现(请注意,它不使用线性探测,它使用单独的链接,如 Stephen pointed out)。
标签: java data-structures computer-science time-complexity