次のメソッド op は、2 つのプライベート整数値インスタンス変数 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) なのですか?