如果某个操作的摊销时间为O(1),那么最坏情况下是否需要O(N ^ 2)时间?
答案 0 :(得分:3)
是的,它可以。摊销的复杂性考虑了最坏情况出现的频率。因此,一旦最坏情况出现在N^2
操作中的大约1个中,则摊销的复杂性将是恒定的。
让我们举个简单的例子 - 在大多数语言中,动态扩展数组(我将在c ++中调用vector
)具有一个用于将元素推送到其后面的分摊的常量时间。大部分时间推送元素是一个简单的值赋值,但偶尔会分配所有分配的元素,我们需要重新分配向量。这将是push_back
操作的最坏情况,当发生这种情况时,操作具有线性复杂性。矢量增长的方式仍然确保重新分配很少。每次重新分配向量时,它的大小都会翻倍。因此,在进行另一次重新分配之前,我们将进行n
个简单的push_back操作(假设n
是重新分配之前向量的容量)。结果,线性复杂度的最坏情况在线性数量的运算中最多出现一次。
类似于上面的情况,想象一个在O(n ^ 2)中重新分配的数据结构,但确保在n ^ 2个常量操作中最多执行一次重新分配。这将是具有O(1)和最坏情况复杂度O(N ^ 2)的摊销复杂度的操作的示例。