我只需要使用迭代方法找到这种递归的复杂性:
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 ..这是不正确的。
答案 0 :(得分:7)
现在复杂的总和成为
当n/2^k = 1
或k = log(n)
时,此递归将耗尽自己。将其替换为等式:
所以一切都由n^2 log^2(n)
支配,这就是递归的复杂性。
P.S。实际上不需要近似求和,用初等数学计算它很容易。
答案 1 :(得分:0)
答案 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)