for(i=1;i<n*n;i++)
for(k=1,l=1;l<n;k=k+2,l=l+k)
foo;
このような構造の時間の複雑さはどのように推定できますか?ループによって、このループを見て奇妙に入れ子になったループの時間複雑度
for(i=1;i<n*n;i++)
for(k=1,l=1;l<n;k=k+2,l=l+k)
foo;
このような構造の時間の複雑さはどのように推定できますか?ループによって、このループを見て奇妙に入れ子になったループの時間複雑度
:
外側のループは1からnまでの二乗され、従ってO(n^2)
インナーループは1からnまでであるが、手順は、1、4、9、16であります.. 。代わりに、1、2、3、4の...、それゆえO(sqrt(n))
ネストされたループは、複雑さを掛けるので、私たちは一般的にO(sqrt(n)*n^2)
またはO(n^2.5)
のために行くridecar2正しいですが、時にはあなたが得ることができるので、注意してくださいトリック質問どこにあなたのアルゴリズムを簡略化することができ
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
doStuff();
:あなたのデータのサイズは、その配列の反復は同じように見えるという事実にもかかわらず、O(n)がないはO(n^2)であることを意味し、n個の* nの配列であり、 lはあるものの
:
したがって、あなたは以下のように、正式に成長複雑さの正確な順序を推測するためにシグマ表記を使用して、それを表現することができます。以下のような内側のループでは一定の割合でインクリメントしていません - 内側の方がO(sqrt(n))に近いと思います。 –
公正なポイント、編集の回答が今すぐです。 – ridecar2