【问题标题】:Master Theorem confusion with the three casesMaster Theorem混淆与三种情况
【发布时间】:2015-07-29 00:21:11
【问题描述】:

我知道当递归关系的形式为:

T(n) = a*T(n/b) + f(n)

我们知道以下内容:

  • a是算法划分原问题的子问题个数
  • b 是太阳问题的大小,即 n/b
  • 最后..f(n) 包含划分问题和合并子问题结果的成本。

现在我们找到一些东西(我会回到术语“某物”) 我们有 3 个案例要检查。

  1. f(n) = O(n^log(b)a-ε)对于某些ε>0的情况;那么T(n) 就是O(n*log(b)a)
  2. f(n) = O(n^log(b)a) 的情况;那么T(n) 就是O(n^log(b)a * log n)
  3. 如果n^log(b)a+ε = O(f(n)) 表示某个常数ε > 0,如果a*f(n/b) =< cf(n) 表示某个常数 c < 1 和几乎所有 n,然后是 T(n) = O(f(n))

好吧,我想起了一些东西。我们如何使用一般示例(即使用变量而不是实际数字)来确定算法属于哪种情况?

例如。考虑以下几点:

T(n) = 8T(n/2) + n

所以a = 8b = 2f(n) = n

那我将如何进行?我如何确定哪种情况?虽然函数 f(n) = some big-Oh notation 这两件事有什么可比性? 以上只是一个例子,向您展示我不明白的地方,所以问题是笼统的。

谢谢

【问题讨论】:

    标签: algorithm divide-and-conquer recurrence


    【解决方案1】:

    正如 CLRS 建议的那样,基本思想是将f(n)n^log(b)a 进行比较,即 n 与幂(将 a 记录到基数 b)。在您的假设示例中,我们有:

    1. f(n) = n
    2. n^log(b)a = n^3,即 n 立方,因为您的递归在每一步都会产生 8 个大小减半的问题。

    因此,在这种情况下,n^log(b)a更大,因为n^3 总是O(n),解决方案是:T(n) = θ(n^3)

    显然,子问题的数量大大超过了您为每个子问题所做的工作(线性,f(n) = n)。因此,直觉告诉并掌握定理验证是 n^log(b)a 主导递归。

    有一个微妙的技术细节,主定理说f(n) 不仅应该小于n^log(b)a O-wise,它应该多项式更小。

    【讨论】:

    • 嘿,谢谢。你的意思是 总是 我们比较相同的东西 n^log(b)a 和 f(n) 还是只是在这个例子中?
    • @John,是的,总是这样,这就是 Master Theorem 所说的。一旦你掌握了复现方法,你几乎可以盲目地应用大师的方法,这当然需要练习。我还建议您看一下计算机科学数学(一本免费的书!)- 谷歌搜索并查看其中有关重复的章节。
    • 谢谢凯达。我会检查一下。
    猜你喜欢
    • 1970-01-01
    • 2020-10-25
    • 2017-09-27
    • 2011-06-01
    • 1970-01-01
    • 2017-05-27
    • 2014-07-09
    • 1970-01-01
    • 2016-01-02
    相关资源
    最近更新 更多