2017-08-10 18 views

答えて

4

whileループの条件の1つはwhile j < nです。意味が最悪の場合、ループはループが何回ループするかにかかわらず(jはゼロから始まり、増加するだけでゼロにリセットされないか、または減少する)、whileループn回でループします。私達はちょうどランタイムは、最悪の場合にはどうなるか検討しているので、あなたが安全に、他の条件arr[i] < arr[j]を無視することができます:forループもn回ループするので、あなたのbig-OO(n+n) => O(n)

NOTEです。

2

このコードは意図的に誤解を招くように設計されているようです。 whileループは、0からnに1回だけ実行され、外側のループの繰り返しごとにリセットされません。

+0

再:一度*最大でまあ、*:「'while'ループは 'N'に '0'から一回実行されます」。 'j'が' n'に到達しないことも可能です。コードが意図的に誤解を招くように設計されているかどうかはわかりません。一目でそれが何をすべきかを知るのは難しいですが、それは何でも行うためにははるかに明確な方法がないかもしれません。 – ruakh

+0

補遺:私はそれが配列の中で最小の要素を見つけたと信じています。 。 。これちなみに私は、ええ、これを書くための明確な方法があります。それは 'ARR [j]を'アクセスする前にちょうど余分な安全性チェックだと思う 'J ruakh

2

あなたは最も内側のループ内の文を実行します合計回数をカウントする必要があります。

それは、これらの値からステップは、外側のループの異なる反復の間に分散することができるにもかかわらず、一度だけn-10の間の値を通過するためのネストされたwhileループが複雑に寄与しません。

ループの最も内側の「ペイロード」、すなわちarr[i] < arr[j]j++jをインクリメントすると、「一方通行」であるので、最大でn回実行されます。その値がゼロにリセットされることはありません、j達するとそうn、ループの本体がもう実行されません。

0

実際、内側のループは 'i'に依存しないので、 'i'が0からn-1になると最大n回実行されます。

前回のループでは 'j'は0で初期化され、次に最悪の場合は 'i'ループでは1 + 2 + 3 + .....が実行されます。 ..n-2 + n-1回= O(n^2)です。

+1

なお、 jの値が各反復後にリセットされない場合、jがnに達すると、それは1回だけ実行されます。複雑さはO(n)を超えません。 –

+0

はい、それは正しいですが、上記の複雑さはO(n^2) "** IF **" 'j'がwhileループの前に初期化されることになります。 –