这个问题可能有点学究,但我一直在努力深入了解分摊分析,对于哈希表的插入为什么是O(1)分摊有些困惑。(注意:我不是在谈论表扩容,我理解那部分)
使用这个定义,“分摊分析给出了每个操作在最坏情况下的平均性能(随时间变化)。” 对于N个插入到哈希表中,最坏情况似乎会导致每个操作都发生碰撞。我相信当负载保持较低时,通用哈希可以保证1/m的碰撞率,但是是否仍然存在理论上每次插入都会发生碰撞的可能性呢?
从技术上讲,哈希表插入的平均分摊分析似乎是O(1)。
编辑:您可以假设哈希表使用基本链接,在相应的链表末尾放置元素。我的真正问题涉及概率算法的分摊分析。
编辑2: 我找到了一篇关于快速排序的this帖子, “此外,摊销运行时间和期望运行时间之间存在微妙但重要的差异。随机枢轴的快速排序需要O(nlogn)的期望运行时间,但其最坏情况下的运行时间为Θ(n ^ 2)。这意味着快速排序可能会花费(n ^ 2)美元的概率很小,但是随着n的增大,发生这种情况的概率趋近于零。” 我认为这可能回答了我的问题。
使用这个定义,“分摊分析给出了每个操作在最坏情况下的平均性能(随时间变化)。” 对于N个插入到哈希表中,最坏情况似乎会导致每个操作都发生碰撞。我相信当负载保持较低时,通用哈希可以保证1/m的碰撞率,但是是否仍然存在理论上每次插入都会发生碰撞的可能性呢?
从技术上讲,哈希表插入的平均分摊分析似乎是O(1)。
编辑:您可以假设哈希表使用基本链接,在相应的链表末尾放置元素。我的真正问题涉及概率算法的分摊分析。
编辑2: 我找到了一篇关于快速排序的this帖子, “此外,摊销运行时间和期望运行时间之间存在微妙但重要的差异。随机枢轴的快速排序需要O(nlogn)的期望运行时间,但其最坏情况下的运行时间为Θ(n ^ 2)。这意味着快速排序可能会花费(n ^ 2)美元的概率很小,但是随着n的增大,发生这种情况的概率趋近于零。” 我认为这可能回答了我的问题。
O(n)
。通常情况下,该术语的含义是指你所提供的“平均分摊”。 - Jardel Lucca