web-dev-qa-db-ja.com

ネストされたforループのBig-Oを計算する

Big-O表記を計算するために、このネストされたループを見つけました。

_for(i=0;i<n;i++)
  for(j=0;j<i*i;j++)
    for(k=0;k<j;k++)
_

この多項式を使用したアルゴリズムの時間の複雑さを取得しました。 C1、C2、C3が各ループの時定数であるとします。内部ループはi * iに行くことに注意してください。

_T(n) = C1(n) + C2(n/2)(n+1) + C3(n)(n^2)(n^2+1)/2
_

これによると、それはO(n^5)の時間の複雑さを持っています。

1
Marlio

この特定のケースでは、変数を最小値と最大値で置き換えて、各ループのステップ数を見つけることができます。

最初のループは0からnに進み、2番目のループは0からn*nに進み、内側のループは0からn*nに進みます。だからn2 最も内側のループの反復、n回2 2番目のループの繰り返し。外側のループのn回の繰り返しを掛けます。したがって、実行時間はO(n * n2 * n2)= O(n5)。

実行時間の計算は、必ずしもそれほど簡単ではない場合があることに注意してください。ループ内で呼び出される関数、再帰、早期に終了するループなどはすべて、計算をさらに複雑にします。

8
Kris Harper