2017-10-01 5 views
0
int count=0; 
do 
{ 
count++; 
n=n/2; 
} while (n>1); 

nの番号を差し込み、それぞれの基本操作をプロットしても、パターンが表示されない場合があります。前もって感謝します!このdo-whileループの時間複雑度はどのくらいですか?

編集:私はここで最悪の場合があります。

+4

あなたは対数に精通していますか? –

+1

try 2,4,8,16,32,64 ... – luk2302

+1

実際には、INT_MAXは定数であり、成長が遅いため、O(1)です。 –

答えて

2

最初のステップはn2で除算することです。だからn/2が得られます。今度は、2で再度割ります。n/2 > 1なら、n/4になります。 n/4 > 1をもう一度やり直してn/8とすれば、それはn/(2^3) ...と書いてください。n/(2^3) > 1あなたはもう一度やり直してください。n/(2^4) ...だから、k回するとn/(2^k)となります。 kを計算する方法n/(2^k) ≤ 1を得るには?簡単:

n/(2^k) ≤ 1 
n ≤ 2^k 
ln(n) ≤ k 

だから、あなたのアルゴリズムは、ループを終了するO(ln(n))反復を必要とします。

コードでは、kcountです。

関連する問題