下面的方法 op 属于一个具有两个私有整数值实例变量 n 和 counter 的类,它们都在构造函数中初始化为零值,随后仅由方法 op 修改。
public void op()
{
if(counter<100)
{
op1(); //method with O(1) time complexity
counter++;
}else {
op2(); //method with O(n^2) time complexity
counter = 0;
}
n++;
}
假设方法 op1 的时间复杂度为 O(1),方法 op2 的时间复杂度为 O(n^2),以下哪项最能代表方法 op 的摊销时间复杂度?
A) O(n)
B) O(n log n)
C) O(1)
D) O(n^2)
E) O(n3)
考试的答案是 D。我认为应该是 C,因为根据我对摊销时间的理解,您可以计算大部分时间会发生什么。在这种情况下,最坏的情况是 O(n^2),但是大多数情况下算法将在 O(1) 中运行。为什么是 O(n^2)?