问题是设置递归关系以找到算法给出的值。答案应该是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++
答案 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)
。
我们已经确定第三个循环将被解雇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}}。