硕士定理 f(n)=log n
Posted
技术标签:
【中文标题】硕士定理 f(n)=log n【英文标题】:Master's theorem with f(n)=log n 【发布时间】:2013-03-22 01:30:45 【问题描述】:对于大师定理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 的值。如何使用大师定理求解递归函数?
【问题讨论】:
【参考方案1】:通常,f(n) 必须是多项式才能应用主定理 - 它不适用于所有函数。然而,主定理有一个有限的“第四种情况”,它允许它应用于多对数函数。
如果 f(n) = O(nlogba logk n), 然后 T(n) = O(nlogba 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 log2 n)
有关更多信息,请参阅此讲义:http://cse.unl.edu/~choueiry/S06-235/files/MasterTheorem-HandoutNoNotes.pdf
【讨论】:
【参考方案2】:您可能会发现the Wikipedia article on the Master theorem 中的这三个案例更有用:
案例 1:f(n) = Θ(nc),其中 c b a 案例 2:f(n) = Θ(nc logk n),其中 c = logb a 案例 3:f(n) = Θ(nc),其中 c > logb a现在不再直接依赖于 n 的选择——重要的是 f 的长期增长率以及它与常数 a 和 b 的关系。如果没有看到您尝试解决的特定重复发生的更多细节,我无法提供任何更具体的建议。
希望这会有所帮助!
【讨论】:
所以对于 f(n) = log n 和 a!=b 的情况,它不适合第二种情况,因为 c 和 k 必须为 1,但它会给出函数n*log n。那么如何检查此功能的适用位置?抱歉问了这么多问题。 请注意,对于任何常数 c,log n 都不是 Theta(n^c)。这里唯一可行的情况是中间的情况,如果你有 a = b,它可能会起作用。如果 a != b,那么您不能直接应用 Master 定理来解决递归问题,而必须找到替代方法。 这正是我想听到的!非常感谢! 但是,如果 f(n) = log(n),我该如何解决这个函数?我很困惑 不能总是应用主定理。如果它不起作用,则需要使用不同的方法。您要解决什么具体的重复问题?【参考方案3】:当 f(n)=log(n) 时,Master 定理不适用。您应该使用更广义的定理,Akra–Bazzi。
结果,T(n)=O(n)。
source.
另一种找到该结果的更具体证明的方法是寻找“最优排序矩阵搜索”算法的计算复杂性的证明。
【讨论】:
以上是关于硕士定理 f(n)=log n的主要内容,如果未能解决你的问题,请参考以下文章