对于使用单独链接N键和M列表(地址)的哈希表,其时间复杂度为:
Insert: O(1)
Search: O(N/M)
Remove: O(N/M)
上述情况应该是正确的。
但我不愿意分析开放式寻址的时间复杂性。假设负载因子仍然是N / M,有人可以解释如何接近它的时间复杂度,也许还可以对这两种实现进行一点比较..谢谢!
编辑:我对这里的线性探测特别感兴趣。答案 0 :(得分:0)
线性探测的分析实际上基本比最初看起来更复杂。线性探测的“经典”分析在(非常不现实的)假设下工作,即用于在表中分布元素的散列函数表现得像一个完全随机的函数。不幸的是,对于大多数散列函数来说,这确实不是一个公平的假设,因为大多数散列函数以合理的非随机方式分配元素。要选择一个用于线性探测的哈希函数,它具有您在上面给出的(预期)时间限制,您通常需要选择一种称为 5-wise独立哈希函数的哈希函数。这种分析并不简单,但如果您感到好奇,可能需要查看论文"Linear Probing with Constant Independence,"。本文还对线性探测哈希表进行了分析,假设您使用较弱类型的哈希函数来说明为什么上述时间限制在这种情况下不会成立。
希望这有帮助!