为什么我在哈希表上仍然看到这些函数的不同运行时复杂性?
在Wiki上,搜索和删除均为O(n)(我认为哈希表的要点是具有恒定的查找,因此,如果搜索为O(n)的意义是什么)。
在不久前的一些课程笔记中,我看到了许多复杂的情况,具体取决于某些细节,包括所有O(1)。如果我可以全部获得O(1),为什么还要使用其他实现?
如果我以C ++或Java之类的语言使用标准哈希表,那么我期望的时间复杂度是多少?
哈希表是O(1) 平均和 摊销的情况下的复杂性,但是它遭受O(n) 最坏情况下的 时间复杂性的困扰。[我认为这就是您的困惑所在]
O(1)
O(n)
O(n)由于以下两个原因,哈希表的时间复杂度最差:
但是,这被认为是O(1)平均和摊销的情况,因为:
n/2
(n*O(1) + O(n)) / n) = O(1)
请注意,由于存在重新哈希问题- 实时应用程序和需要低延迟的应用程序- 不应将哈希表用作其数据结构。
编辑: 哈希表的另一个问题:缓存 您可能会在大型哈希表中看到性能损失的另一个问题是由于缓存性能所致。 哈希表的缓存性能很差 ,因此对于大型集合来说,访问时间可能会更长,因为您需要将表的相关部分从内存重新加载到缓存中。