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

标签 python algorithm data-structures hash

在grokking algorithms一书中,作者说

In the worst case, a hash table takes O(n)—linear time—for everything, which is really slow.

在最坏的情况下,我知道哈希函数会将所有键映射到相同的槽中,哈希表在该槽中启动一个链表来存储所有项目。所以对于搜索来说,这将花费线性时间,因为你必须一项一项地扫描所有项目。

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

对于insert,hash table可以直接追加链表末尾的项吗?这将需要恒定的时间。

最佳答案

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

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

关于python - 为什么在最坏的情况下插入和删除哈希表需要线性时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47738554/

相关文章:

python - 程序根本不运行

algorithm - 陷入Dijkstra算法

algorithm - 这两个功能在效率方面有什么区别吗?

创建一棵二叉树,但它不起作用 - 树始终为空

Java操作系统进程队列

python - Python 的基于位置的推荐框架

Python: filter(None, [list of bools]) 行为

c++ - 有没有一种很好的方法可以将 std::minmax(a, b) 分配给 std::tie(a, b)?

c - 数据结构问题

python - Tensorflow tf.constant_initializer 非常慢