【发布时间】:2012-12-31 09:29:25
【问题描述】:
我一直在尝试计算以下函数的复杂度:
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);
具体来说,while 循环的复杂度。有人告诉我 g(n) 的复杂度是 O(n),但我不确定它的复杂度是多少,以及我将如何解决它.我已经意识到复杂度不会是 O(0.5n^2),但我不确定如何计算它,因为每次减半。有人有什么想法吗?
【问题讨论】:
-
如果您的问题大小每次迭代减半,您需要进行多少次迭代才能达到问题大小为 0? IE。给定一个数字
n,您需要在(整数)计算器上按多少次 /2 才能达到 0? -
@Karel 我试过用 8 等数字表示 n/2,但 20 等数字表示 n/4,所以我不确定。
-
这个数字实际上被称为对数(以 2 为底,除以 2)。 IE。外部循环重复 log(n) 次,其余的应该很容易 :) 另见 cs.stackexchange.com/questions/581/…
-
@KarelPetranek 我查看了那个链接,但是如果它重复 log n 次,当我使用 10 作为 n 的值时,我计算它应该运行 4 次,但我得到 log( 10) = 3.32?
-
你不能运行一个循环 3.32 次,所以你总是需要将数字向上取整(理论上迭代的分数意味着你需要在实践中进行整个迭代)。
标签: algorithm sorting complexity-theory asymptotic-complexity