問題
このアルゴリズムの複雑さを計算します。
for(i=n; i>1;i=i/2)
for(j=i;j<n;j++){
statement;
}
このトピックについて以前に行ったこと:
最初のループは logn 回実行されます。2 番目のループは、i が n から始まり、外側のループの反復ごとに i/2 に変化するように ni 回実行されます。したがって、内側のループは次のように実行されます。
n-n 0 times
n - n/2 n/2 times
n - n/4 3n/4 times
n - n/8 7n/8 times
n - n/16 15n/16 times
などなど
n - 1
回
したがって、一般的な用語はn * ((2^n)-1)/(2^n)
現在、このシーケンスは算術的でも幾何学的でもありません。したがって、 の式はn/2 * (a+l)
適用できません。この解決策をさらに進めるにはどうすればよいですか、それが間違っている場合は、正しい方法は何ですか.
注:n/2*(a+l)
が適用される場合、結果の複雑さは次のようになります。-n/(2^n) = O(2^n).