在书中的grokking算法中,作者说
在最坏的情况下,哈希表需要O(n) - 线性时间 - 所有内容都非常慢。
在最坏的情况下,我理解哈希函数将映射相同槽中的所有键,哈希表在该槽开始链接列表以存储所有项。因此,对于搜索,它将花费线性时间,因为您必须逐个扫描所有项目。
我不明白的是,对于插入和删除,该哈希表需要线性时间来执行。在最坏的情况下,所有项目都存储在指向链表的同一个槽中。而对于链表,删除和插入需要恒定的时间。为什么哈希表需要线性时间?
对于insert,是否哈希表只是将项目附加到链表的末尾?这需要一段时间。
答案 0 :(得分:2)
删除不会是常量:您必须访问整个最坏情况链接列表才能找到要删除的对象。所以这也是O(n)的复杂性。
您将遇到同样的问题:您不想要任何重复项,因此,为了确保不创建其中的一些,您必须检查整个链接列表。
答案 1 :(得分:0)
因为为了插入和删除,你需要在最坏的情况下进行搜索并搜索O(n)。因此,在最坏的情况下也应该至少采用O(n)。
答案 2 :(得分:0)
对于链表,删除和插入需要一段时间。
他们没有。它们需要线性时间,因为您必须首先找到要删除的项目(或要插入的位置)。