我必须从这个算法中找到递推方程:
ALGO(n)
if n <= 2 then return(0)
else
y = ALGO(n/3)
i = 2^n
while i >= 2 do
j = (1/2) * log(i) //base 2
while j > 0 do
i = i/2
j = j - 1
z = ALGO(n/2)
return(z+y)
我对此进行了推理并得出结论 如果n <= 2
,则T(n)= O(1)我认为内部while是O(n)(j在每次迭代时减少1)而外部while是O(logn)(i在每次迭代时减半),给出O(n) *的log(n)):
如果n> 1,则T(n)= T(n / 3)+ T(n / 2)+ O(n * log(n))。 2这是一个很好的论点吗?
答案 0 :(得分:3)
两个while循环应该是O(n):
1. i = 2^n;
2. j = (1/2) * log (i) = 1/2 * n = n/2
3. the inner while executes for n/2 times then j becomes 0, now i = i / 2^(n/2) = 2^(n/2);
现在这个程序将回到第1步,只有我减半。所以这两个循环应该是:
n/2+n/4+n/8+... = O(n)
事实上,这也可以从更简单的角度来看待。由于循环在i == 1之前不会终止,并且对于每次执行i = i / 2,内循环将运行n次。想象一下,我们将内循环和out循环展平,将有n次i = i / 2,因此两个循环为O(n)。
总之,T(n)= T(n / 3)+ T(n / 2)+ O(n)。
希望这可能有所帮助!