循环的递归关系

时间:2010-10-20 13:37:28

标签: algorithm complexity-theory recurrence

问题是设置递归关系以找到算法给出的值。答案应该是teta()术语。

foo = 0;

for int i=1 to n do
    for j=ceiling(sqrt(i)) to n do
        for k=1 to ceiling(log(i+j)) do
             foo++

1 个答案:

答案 0 :(得分:0)

不完全确定,但这里就是。

第二个循环执行1 - sqrt(1) + 2 - sqrt(2) + ... + n - sqrt(n) = n(n+1)/2 - n^1.5次=> O(n^2)次。sqrt(1) + ... + sqrt(n) = O(n^1.5)次。有关O(n^2)

的讨论,请参阅here

我们已经确定第三个循环将被解雇for i = 1 to n do for j = 1 to n do for k = 1 to log(i+j) do ++foo 次。所以算法渐近等价于这样的东西:

log(1+1) + log(1+2) + ... + log(1+n) + ... + log(n+n)

这导致总和log(1+1) + log(1+2) + ... + log(1+n) = log(2*3*...*(n+1)) = O(n log n)n。这会乘以O(n^2 log n),从而产生O(n^2 log n)

所以你的算法也是Theta(n^2 log n),如果我没弄错的话也是{{1}}。