使用迭代方法求复杂度T(n)= 4T(n / 2)+(n ^ 2)* logn

时间:2015-12-30 22:31:13

标签: algorithm math big-o recurrence

我只需要使用迭代方法找到这种递归的复杂性:

T(n) = 4T(n/2) + (n^2)*logn

我知道您可以使用master方法解决这个问题,复杂性为(n^2)(logn)^2,但我尝试使用迭代方法解决它,我得到了其他内容:

T(n) = 4 * T(n/2) + (n^2) * log(n)
T(n/2) = 4 * T (n/4) + ((n/2)^2) * log(n/2)
T(n/4) = 4 * T(n/8) + ((n/4)^2) * log(n/4)

T(n) = 4 * (4 *  (4 * T(n/8) + (n/4)^2 * log(n/4)) + (n/2)^2 * log(n/2)) + (n^2) * log(n)

T(n) = 64T(n/8) + 16((n/4)^2) * log(n/4) + 4((n/2)^2) * log(n/2) + (n^2)log(n)

T(n) = (4^i) * T(n/(2^i)) + 4^(i-1) * (n/(2^(i-1)))^2 * log(n/(2^(i-1)))

使用i = logn之后我得知算法的复杂度为2 ^ n ..这是不正确的。

4 个答案:

答案 0 :(得分:7)

如果您要仔细解除递归,您将获得:enter image description here

现在复杂的总和成为

enter image description here

n/2^k = 1k = log(n)时,此递归将耗尽自己。将其替换为等式:

enter image description here,其中c = T(1)

所以一切都由n^2 log^2(n)支配,这就是递归的复杂性。

P.S。实际上不需要近似求和,用初等数学计算它很容易。

enter image description here

答案 1 :(得分:0)

这不会立即构成大师定理的三种情况中的任何一种。但是我们可以基于Master定理得出一个上限和下限。

T (n) = n^2 * log n

也许这会对您有所帮助。

mastermethod

答案 2 :(得分:0)

在双方分配等价条款方面可以走得更远。

T(n)/n^2 = T(n/2)/(n/2)^2 + log(n)

已经找到。现在,要获得左侧log(n)中的一项和右侧log(n/2)=log(n)-1中相同的项,请通过二项式公式考虑两者的平方

(log(n)-1)^2 = log(n)^2 - 2*log(n) + 1

这样

T(n)/n^2 - log(n)^2/2 = T(n/2)/(n/2)^2 - log(n/2)^2/2 - 1

T(n)/n^2 - log(n)^2/2 + log(n) = T(n/2)/(n/2)^2 - log(n/2)^2/2 + log(n/2)

现在达到了等价项,可以得出结论,左侧的表达式是恒定的。

T(n) = n^2 * (1/2*log(n)^2 - log(n) + C)

答案 3 :(得分:0)

 if T(n/2) = 4T(n/(2^2)) + ((n/2)^2)*log (n/2)  ----> 1,
    T(n/4) = 4T(n/(2^3)) + ((n/4)^2)*log (n/4)  ----> 2
    and
    T(n/8) = 4T(n/(2^)4) + ((n/8)^2)*log (n/8)  ----> 3,


 T(n) = 4T(n/2) + (n^2)*log n
 T(n) = 4[4T(n/(2^2)) + ((n/2)^2)*log (n/2)] + (n^2)*log n  ----> replace 1 with T(n/2)
 T(n) = (4^2)T(n/4) + (n^2)*log (n/2) + (n^2)*log n
 T(n) = (4^2)[4T(n/(2^3)) + ((n/4)^2)*log (n/4)] + (n^2)*log (n/2) + (n^2)*log n ----> replace 2 with T(n/4)
 T(n) = (4^3)T(n/8) + (n^2)*log (n/4) + (n^2)*log (n/2) + (n^2)*log n ----> replace 3 with T(n/8)
 T(n) = (4^3)[4T(n/(2^)4) + ((n/8)^2)*log (n/8)] + (n^2)*log (n/4) + (n^2)*log (n/2) + (n^2)*log n
 T(n) = (4^4)T(n/16) + (n^2)*log (n/8) + (n^2)*log (n/4) + (n^2)*log (n/2) + (n^2)*log n

 if this goes till k,

 T(n) = (4^k)T(n/(2^k)) + (n^2) (log (n/8) + log (n/4) + log (n/2) + log n)

 if n/(2^k) = 1, n = 2^k, k = log n and T(1) = 1,

 T(n) = (n^2)T(1) + (n^2) (log ((n/(2^k)......(n/(2^3)) * (n/(2^2)) * (n/(2^1)) * n)
 T(n) = (n^2)T(1) + (n^2) (log ((n/(2^log n)......(n/(2^3)) * (n/(2^2)) * (n/(2^1)) * n)
 T(n) = (n^2) + (n^2) (log (2^logn)) (Using geometric series)
 T(n) = O(n^2 log n)