我一直在试图计算下列功能的复杂性:计算复杂性?
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 –