【问题标题】:Understanding Master Theorem理解主定理
【发布时间】:2012-11-05 23:38:33
【问题描述】:

通用形式:T(n) = aT(n/b) + f(n)

所以我必须比较 n^logb(a) 和 f(n)

如果n^logba > f(n)案例1T(n)=Θ(n^logb(a))

如果n^logba f(n)是案例2T(n)=Θ((n^logb(a))(logb(a)))

正确吗?还是我误会了什么?

那么案例 3 呢?什么时候适用?

【问题讨论】:

  • 为什么投票结束这个话题并否决了这个话题?这个话题不是题外话...阅读常见问题解答...我的问题涵盖软件算法类别...

标签: algorithm master-theorem


【解决方案1】:

解决递归的主定理

重复发生在解决复杂问题的分而治之策略中。

它能解决什么问题?

  • 它解决了T(n) = aT(n/b) + f(n) 形式的重复问题。
  • a 应该大于或等于 1。这意味着该问题至少会简化为一次较小的子问题。至少需要一次递归。
  • b 应该大于 1。这意味着在每次递归时,问题的大小都会减小到更小的大小。如果b 不大于 1,则意味着我们的子问题不是较小的。
  • 对于相对较大的 n 值,f(n) 必须为正数。

考虑下图:

假设我们有一个大小为n 的问题需要解决。在每一步,问题都可以被划分为a子问题,每个子问题的规模更小,其中规模缩小了b的系数。

上面的说法简单来说就是n大小的问题可以分成a大小相对较小的子问题n/b

另外,上图显示,最终当我们多次划分问题时,每个子问题会很小,可以在恒定时间内解决。

对于下面的推导,考虑log 到基础b

假设H 是树的高度,那么H = logn。叶数=a^logn

  • 在级别 1 完成的总工作量:f(n)
  • 第 2 级完成的总工作量:a * f(n/b)
  • 在级别 1 完成的总工作量:a * a * f(n/b2)
  • 上一层完成的总工作量:number of leaves * θ(1)。这等于n^loga

主定理的三种情况

案例一:

现在让我们假设每个级别的操作成本都增加了一个显着因素,当我们到达叶级别时,f(n) 的值在多项式上小于n^loga 的值。那么整体运行时间将在很大程度上受到最后一级的成本的支配。因此T(n) = θ(n^loga)

案例2:

让我们假设每个级别的操作成本大致相等。在这种情况下,f(n) 大致等于n^loga。因此,总运行时间将是f(n) 乘以关卡总数。

T(n) = θ(n^loga * logn) 其中k 可以是>=0。其中logn 将是k >= 0 的树的高度。

注意:这里k+1是log in logn的基础

案例3:

让我们假设每个级别上的操作成本在每个级别上都以一个显着的因素减少,当我们到达叶级别时,f(n) 的值在多项式上大于n^loga 的值。那么整体运行时间将主要受第一级成本的支配。因此T(n) = θ(f(n))


如果您对更详细的阅读和练习示例感兴趣,请访问我的博客条目Master Method to Solve Recurrences

【讨论】:

【解决方案2】:

我认为你误解了它。 如果 n^logba > f(n) 是案例 1 并且 T(n)=Θ(n^logb(a))

这里你不应该担心 f(n) 结果,你得到的是 T(n)=Θ(n^logb(a))。 f(n) 是 T(n) 的一部分。如果你得到结果 T(n),那么该值将包含 f(n)。 所以,那部分就不用考虑了。

如果你不清楚,请告诉我。

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2015-02-24
    • 2010-12-30
    • 2017-04-12
    • 2017-10-20
    相关资源
    最近更新 更多