2016-09-28 9 views
2

実行時間を入力サイズNで特定する方法がわかりません。これが私が試みたことです。私は定数が正しいと推測しています。どのように見えるのですか?条件付きループの実行時間(ステップ数)

i = 1;        //1 
k = n;        //1 
while (i <= k) {      //N+1 
    while (i <= k && A[i] < 0) {  //i+2 
     i = i + 1;     //2i 
    } 
    while (i <= k && A[k] >= 0) {  //i+2 
     k = k - 1;     //2i 
    } 
    printf("...");     //1 
    i = i + 1;      //1 
    k = k - 1;      //1 
} 

答えて

3

これは、両端からキャンドルを焼くこととして知られています。 ikはどこかの中間で出会うが、アレイの各要素は1回だけ訪れる。したがって実行時間はO(n)です。

外側のwhileループはプロセスが完了するのを待っているだけなので、実行時間の計算は考慮されません。最初の内側のwhileループは、詰まるまでiを右に移動します。 2番目の内側のwhileループは、詰まるまでkを左に移動します。

ライン彼らは捕まってしまったポイント過去

i = i + 1; 
k = k - 1; 

移動ik

iが配列要素の一部を訪問し、kが他の配列要素を訪問しますが、配列の各要素は1回だけ訪問されます。

+0

ああ私はそれを見る!各行の歩数は正しいですか?たとえば、最初のinner whileループでは、条件の1つがA [i] <0であることがわかります。これは、1から始まるので真実ではないと思いますか? – userrandomnums

関連する問題