我正在尝试与朋友做作业,一个问题询问线性探测方法的搜索,添加和删除的平均运行时间。我认为它是O(n)因为它必须检查特定数量的节点,直到它找到一个要添加的开放节点。当搜索它从原始索引开始并向上移动直到找到所需的数字。但我的朋友说这是O(1)。哪一个是对的?
答案 0 :(得分:10)
当我们谈论渐近复杂性时,我们通常会考虑非常大的n。现在,对于哈希表中的冲突处理,一些方法是链式哈希和哈希表。线性探测。在这两种情况下,可能会发生两件事情(这将有助于回答您的问题):1。您可能需要调整哈希表的大小,因为它已满2.可能会发生冲突。
在最坏的情况下,它将取决于你如何实现你的哈希表,比如线性探测你没有找到数字,你继续移动,你正在寻找的数字是在最后。这是O(n)最坏情况下的运行时间。进行链式散列技术,当发生碰撞时,处理它们说我们已将密钥存储在平衡二叉树中,因此最坏情况下的运行时间将为O(log n)。
现在来到最佳案例运行时间,我认为没有混淆,在任何一种情况下都是O(1)。
O(n)将在最坏的情况下发生,而不是在设计良好的哈希表的平均情况下。如果在平均情况哈希表中开始发生这种情况,则不会在数据结构中找到一个位置,因为平均而言平衡树将总是给你O(log n)并且ON ON OF OF OF也会保留订单。
很抱歉这样说但不幸的是你的朋友是对的。你的情况会在最坏的情况下发生。
另请查看此处了解更多信息,即摊销的运行时间:Time complexity of Hash table