硕士定理 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 nn*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的主要内容,如果未能解决你的问题,请参考以下文章

主定理复习

具有常数的主定理

什么时候可以实际应用主定理?

用 log n 求解主定理:T(n) = 2T(n/4) + log n

在主定理中找到 f(n) 的值

使用主定理求解 T (n) = √2*T(n/2) + log n