答案 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))))
。
n
和k
之间的关系如下:
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)
我们已经为你给出的递归关系的函数恢复了一个精确的闭式表达式。这样做并不总是像这个例子那样简单。