我正在学习数据结构和算法课程,目前被这个递归方程卡住了:
T(n) = logn*T(logn) + n
显然,这个问题不能使用Master定理解决,因此我想知道是否有任何解决这个递归方程的想法。我相信它应该通过改变参数来解决,比如将n视为2 ^ m,但我无法找到任何好的修复方法。
我正在学习数据结构和算法课程,目前被这个递归方程卡住了:
T(n) = logn*T(logn) + n
显然,这个问题不能使用Master定理解决,因此我想知道是否有任何解决这个递归方程的想法。我相信它应该通过改变参数来解决,比如将n视为2 ^ m,但我无法找到任何好的修复方法。
T(n) = (log n)O(log n) + n
= O(log^2(n)) + O(n)
= O(n)
n<5
,T(n)<cn
”,然后使用强归纳法来使它更加严谨。(是大omega) - TeepeemmTheta(n)
。要证明某个东西是 Theta(n)
,你必须展示它是 Omega(n)
和 O(n)
。在这种情况下,Omega(n)
是显然的,因为 T(n)>=n
。为了展示 T(n)=O(n)
,首先:
N
,使得对于所有的 n>N
,log(n)^2 < n/100
。这是可能的,因为 log(n)^2=o(n)
。C>100
,使得对于所有的 n<=N
,T(n)<Cn
。这是可能的,因为 N
是有限的。我们将归纳地展示对于所有的 n>N
,T(n)<Cn
。由于 log(n)<n
,根据归纳假设,我们有:
T(n) < n + log(n) C log(n)
= n + C log(n)^2
< n + (C/100) n
= C * (1/100 + 1/C) * n
< C/50 * n
< C*n
T(n) = n + o(n)
。