从算法中找出递推方程

时间:2011-07-07 15:02:26

标签: equation recurrence

我必须从这个算法中找到递推方程:

    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

这是一个很好的论点吗?

1 个答案:

答案 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)。

希望这可能有所帮助!