0
int count=0;
do
{
count++;
n=n/2;
} while (n>1);
nの番号を差し込み、それぞれの基本操作をプロットしても、パターンが表示されない場合があります。前もって感謝します!このdo-whileループの時間複雑度はどのくらいですか?
編集:私はここで最悪の場合があります。
int count=0;
do
{
count++;
n=n/2;
} while (n>1);
nの番号を差し込み、それぞれの基本操作をプロットしても、パターンが表示されない場合があります。前もって感謝します!このdo-whileループの時間複雑度はどのくらいですか?
編集:私はここで最悪の場合があります。
最初のステップはn
を2
で除算することです。だから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))
反復を必要とします。
コードでは、k
はcount
です。
あなたは対数に精通していますか? –
try 2,4,8,16,32,64 ... – luk2302
実際には、INT_MAXは定数であり、成長が遅いため、O(1)です。 –