我正在学习数据结构和算法课程,我坚持这个递归方程式:
T(n) = logn*T(logn) + n
显然这不能通过使用主定理来处理,所以我想知道是否有人有任何解决这个递归方程的想法。我很确定它应该通过改变参数来解决,比如考虑n为2 ^ m,但我无法找到任何好的修复。
答案 0 :(得分:1)
这绝不是官方证明,但我认为是这样的。
关键是+ n
部分。因此,T
位于o(n)
下方。 (或者应该是那个伟大的欧米茄?我生锈了。)所以让我们假设T(n) = O(n)
然后去做。
代入原始关系
T(n) = (log n)O(log n) + n
= O(log^2(n)) + O(n)
= O(n)
所以它仍然存在。
答案 1 :(得分:1)
答案是Theta(n)
。要证明某些内容为Theta(n)
,您必须显示Omega(n)
和O(n)
。在这种情况下,Omega(n)
显而易见,因为T(n)>=n
。要显示T(n)=O(n)
,首先
N
选择一个大的有限值log(n)^2 < n/100
,n>N
。这是可能的,因为log(n)^2=o(n)
。C>100
选择一个T(n)<Cn
常量n<=N
。这是可能的,因为N
是有限的。 我们将以归纳方式显示所有T(n)<Cn
n>N
。自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)
。