复杂性求解递推方程

时间:2018-01-18 09:13:54

标签: computer-science

有谁知道如何解决这个复杂性方程?

T(n)=sqrt(n)T(sqrt(n))+nlogn

所以我解决了。

这是解决方案  REPL's

1 个答案:

答案 0 :(得分:0)

这是递归定义:

T(1) = c
T(n) = sqrt(n) * T(sqrt(n)) + nlogn

我们可以假设小数结果向下舍入到最接近的整数。我们可以列出一些值并尝试猜测模式:

n    T(n)
-    ----
1     c
2     1*(c)        +   2*log(2)   =    c +    2
4     2*(c + 2)    +   4*log(4)   =   2c +   12
16    4*(2c + 12)  +  16*log(16)  =   8c +  112
256  16*(8c + 112) + 256*log(256) = 128c + 3840
...

到目前为止,我们可以很容易地注意到c这个词的系数等于n的一半。片刻的反思将导致这一观察结果普遍存在的结论。我们的其他条款正在建立起来:

                                    2log2
 2(2log2)                         + 4log4
 4(2(2log2) + 4log4)              + 16log16
16(4(2(2log2) + 4log4) + 16log16) + 256log256
...

我们可以使用对数定律将这些术语组合如下:

log(2^2)
log(2^4) + log(2^8)
log(2^16) + log(2^32) + log(2^64)
log(2^256) + log(2^512) + log(2^1024) + log(2^2192)
...

因此,k元素的常量是k项的总和,其中日志中的最小项是2^(2^(2^(k-1))),并且日志中的每个后续项都是两次前一个。我们可以进一步使用日志法来帮助获得封闭形式的解决方案:

log(2^2)
log(2^4) + 2log(2^4)
log(2^16) + 2log(2^16) + 4log(16)
log(2^256) + 2log(2^256) + 4log(2^256) + 8log(2^256)
...

我们发现我们可以使用最小值k表示log(2^(2^(2^(k-1))))项的值并计算出现次数:1,1 + 2,1 + 2 + 4,...这些计数形式封闭形式的序列2 ^ k - 1.因此,k元素的值为(2^k - 1)log(2^(2^(2^(k-1))))

nk之间的关系如下:

k     n
-    ---
1      2 = sqrt(2^(2^k))
2      4 = sqrt(2^(2^k))
3     16 = sqrt(2^(2^k))
4    256 = sqrt(2^(2^k))
...

So, `n = sqrt(2^(2^k))`. This means `n^2 = 2^(2^k)`, `2logn = 2^k` and finally `k = loglogn + 1`. Replacing in our formula for the constant given `k` yields:

(2^(loglogn + 1) - 1)log(2^(2^(2^((loglogn + 1)-1))))
(2logn - 1)log(2^(2^(2^(loglogn)))
(2logn - 1)log(2^n)
(2logn - 1)n

因此,不涉及c的字词为n(2logn - 1)。总而言之,我们有:

T(1) = c
T(n) = n(c/2 + 2logn - 1)

我们已经为你给出的递归关系的函数恢复了一个精确的闭式表达式。这样做并不总是像这个例子那样简单。