硕士定理,f(n)= log n

时间:2013-03-31 23:04:10

标签: algorithm big-o divide-and-conquer master-theorem

对于硕士定理T(n) = a*T(n/b) + f(n)我使用3个案例:

  1. 如果a*f(n/b) = c*f(n)为常量c > 1,则为T(n) = (n^log(b) a)
  2. 如果a*f(n/b) = f(n)T(n) = (f(n) log(b) n)
  3. 如果a*f(n/b) = c*f(n)为常量c < 1,则为T(n) = (f(n))
  4. 但是当f(n) = log nn*log n时,c的值取决于n的值。如何使用主定理解决递归函数?

3 个答案:

答案 0 :(得分:7)

通常,f(n)必须是多项式才能应用主定理 - 它不适用于所有函数。然而,主定理有一个有限的“第四种情况”,它允许它应用于多对数函数。

如果 f(n)= O(n log b a log k n),那么 T(n)= O(n log b a log k + 1 n)。

换句话说,假设您有T(n)= 2T(n / 2)+ n log n。 f(n)不是多项式,但f(n)= n log n,k = 1.因此,T(n)= O(n log 2 n)

有关详细信息,请参阅此讲义:http://cse.unl.edu/~choueiry/S06-235/files/MasterTheorem-HandoutNoNotes.pdf

答案 1 :(得分:2)

您可能会发现the Wikipedia article on the Master theorem中的这三种情况更有用:

  • 情况1:f(n)=Θ(n c ),其中c <1。 log b a
  • 案例2:f(n)=Θ(n c log k n),其中c = log b a
  • 情况3:f(n)=Θ(n c ),其中c> 1。 log b a

现在不再直接依赖于n的选择 - 所有重要的是f的长期增长率以及它与常数a和b的关系。如果没有看到您尝试解决的特定复发的更多细节,我无法提供任何更具体的建议。

希望这有帮助!

答案 2 :(得分:-1)

当f(n)= log(n)时,Master定理不适用。您应该使用更广义的定理Akra–Bazzi

结果是T(n)= O(n)。

source

找到此结果更具体证明的另一种方法是寻找“最佳排序矩阵搜索”算法的计算复杂性证明。

enter image description here