我一直在試圖計算下列功能的複雜性:計算複雜性?
k=n;
while(k>0)
g(n);
k=k/2; {Comment: this is integer division, so 1/2=0}
end while;
for(j=0;j<m;j++)
f(m);
具體來說,在同時loop.I的複雜性被告訴,G(N)的複雜度爲O(n),但我不確定它會是什麼複雜性,以及我會如何解決它。我已經認識到複雜性不會是O(0.5n^2),但我不確定如何計算它,因爲每次都減半。有人有主意嗎?
如果您的問題大小減半每次迭代中,多少次迭代,你需要做的,達到0問題大小?即給定一個數字'n',你需要在你的(整數)計算器上按/ 2多少次才能達到0? –
@Karel我試過它的數字,如8,這給出了n/2,但一個數字,如20給n/4,所以我不確定。 – user1899174
該數字實際上稱爲對數(基數爲2,因爲您除以2)。即外循環是重複log(n)次,其餘的應該很容易:)另請參閱http://cs.stackexchange.com/questions/581/intuition-for-logarithmic-complexity –