算法复杂度,求解递归方程

时间:2013-10-03 09:24:27

标签: algorithm math recursion complexity-theory master-theorem

我正在学习数据结构和算法课程,我坚持这个递归方程式:

T(n) = logn*T(logn) + n

显然这不能通过使用主定理来处理,所以我想知道是否有人有任何解决这个递归方程的想法。我很确定它应该通过改变参数来解决,比如考虑n为2 ^ m,但我无法找到任何好的修复。

2 个答案:

答案 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),首先

  1. 为所有N选择一个大的有限值log(n)^2 < n/100n>N。这是可能的,因为log(n)^2=o(n)
  2. 为所有C>100选择一个T(n)<Cn常量n<=N。这是可能的,因为N是有限的。
  3. 我们将以归纳方式显示所有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)