对于硕士定理T(n) = a*T(n/b) + f(n)
我使用3个案例:
a*f(n/b) = c*f(n)
为常量c > 1
,则为T(n) = (n^log(b) a)
a*f(n/b) = f(n)
则T(n) = (f(n) log(b) n)
a*f(n/b) = c*f(n)
为常量c < 1
,则为T(n) = (f(n))
但是当f(n) = log n
或n*log n
时,c
的值取决于n的值。如何使用主定理解决递归函数?
答案 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中的这三种情况更有用:
现在不再直接依赖于n的选择 - 所有重要的是f的长期增长率以及它与常数a和b的关系。如果没有看到您尝试解决的特定复发的更多细节,我无法提供任何更具体的建议。
希望这有帮助!
答案 2 :(得分:-1)
当f(n)= log(n)时,Master定理不适用。您应该使用更广义的定理Akra–Bazzi。
结果是T(n)= O(n)。
找到此结果更具体证明的另一种方法是寻找“最佳排序矩阵搜索”算法的计算复杂性证明。