需要O(1)摊销时间的操作是否具有最坏情况的O(n ^ 2)时间?

时间:2014-12-17 07:21:32

标签: complexity-theory time-complexity asymptotic-complexity amortized-analysis

如果某个操作的摊销时间为O(1),那么最坏情况下是否需要O(N ^ 2)时间?

1 个答案:

答案 0 :(得分:3)

是的,它可以。摊销的复杂性考虑了最坏情况出现的频率。因此,一旦最坏情况出现在N^2操作中的大约1个中,则摊销的复杂性将是恒定的。

让我们举个简单的例子 - 在大多数语言中,动态扩展数组(我将在c ++中调用vector)具有一个用于将元素推送到其后面的分摊的常量时间。大部分时间推送元素​​是一个简单的值赋值,但偶尔会分配所有分配的元素,我们需要重新分配向量。这将是push_back操作的最坏情况,当发生这种情况时,操作具有线性复杂性。矢量增长的方式仍然确保重新分配很少。每次重新分配向量时,它的大小都会翻倍。因此,在进行另一次重新分配之前,我们将进行n个简单的push_back操作(假设n是重新分配之前向量的容量)。结果,线性复杂度的最坏情况在线性数量的运算中最多出现一次。

类似于上面的情况,想象一个在O(n ^ 2)中重新分配的数据结构,但确保在n ^ 2个常量操作中最多执行一次重新分配。这将是具有O(1)和最坏情况复杂度O(N ^ 2)的摊销复杂度的操作的示例。