为什么在最坏的情况下插入和删除需要哈希表的线性时间?

时间:2017-12-10 11:52:22

标签: python algorithm data-structures hash

在书中的grokking算法中,作者说

  

在最坏的情况下,哈希表需要O(n) - 线性时间 - 所有内容都非常慢。

在最坏的情况下,我理解哈希函数将映射相同槽中的所有键,哈希表在该槽开始链接列表以存储所有项。因此,对于搜索,它将花费线性时间,因为您必须逐个扫描所有项目。

我不明白的是,对于插入和删除,该哈希表需要线性时间来执行。在最坏的情况下,所有项目都存储在指向链表的同一个槽中。而对于链表,删除和插入需要恒定的时间。为什么哈希表需要线性时间?

对于insert,是否哈希表只是将项目附加到链表的末尾?这需要一段时间。

3 个答案:

答案 0 :(得分:2)

删除不会是常量:您必须访问整个最坏情况链接列表才能找到要删除的对象。所以这也是O(n)的复杂性。

您将遇到同样的问题:您不想要任何重复项,因此,为了确保不创建其中的一些,您必须检查整个链接列表。

答案 1 :(得分:0)

因为为了插入和删除,你需要在最坏的情况下进行搜索并搜索O(n)。因此,在最坏的情况下也应该至少采用O(n)。

答案 2 :(得分:0)

  

对于链表,删除和插入需要一段时间。

他们没有。它们需要线性时间,因为您必须首先找到要删除的项目(或要插入的位置)。