首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >渐近符号

渐近符号
EN

Stack Overflow用户
提问于 2013-04-17 13:19:14
回答 1查看 348关注 0票数 0

根据我所学的:我被要求确定一个函数相对于另一个函数的复杂度。即给定f(n)g(n),确定O(f(n()。在这种情况下,我使用O(), Theta and Omega notations替换值,将两者进行比较并得出复杂度。

但是,在substitution method for solving recurrences中,每个标准文档都有以下几行:

• [Assume that T(1) = Θ(1).]

·Guess O(n3) . (Prove O and Ω separately.)

·Assume that T(k) ≤ ck3 for k < n .

·Prove T(n) ≤ cn3 by induction.

除了f(N)之外,如果没有给出任何其他信息,我该如何找到O和Ω呢?我可能错了(我肯定是错的),任何关于上面的信息都是受欢迎的。

上面的一些假设是关于这个问题的:T(n) = 4T(n/2) + n,而步骤的基本轮廓是针对所有这样的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-17 14:10:48

这种特殊的递归是可以通过主定理求解的,但您可以从替换方法中获得一些反馈。让我们尝试一下您对cn^3的初步猜测。

代码语言:javascript
运行
AI代码解释
复制
T(n)  = 4T(n/2) + n
     <= 4c(n/2)^3 + n
      = cn^3/2 + n

假设我们选择c,以便所有相关nn <= cn^3/2

代码语言:javascript
运行
AI代码解释
复制
T(n) <= cn^3/2 + n
     <= cn^3/2 + cn^3/2
      = cn^3,

所以T就是O(n^3)。这个推导过程中有趣的部分是,我们使用了一个三次项来消除线性项。像这样的过度杀伤力通常是一个迹象,表明我们可以猜得更低。让我们试试cn

代码语言:javascript
运行
AI代码解释
复制
T(n)  = 4T(n/2) + n
     <= 4cn/2 + n
      = 2cn + n

这行不通的。右边和我们想要的界限之间的差距是cn + n,这是我们想要的界限的大θ。这通常意味着我们需要猜测得更高。让我们试试cn^2

代码语言:javascript
运行
AI代码解释
复制
T(n)  = 4T(n/2) + n
     <= 4c(n/2)^2 + n
      = cn^2 + n

乍一看,这看起来也是一个失败。然而,与我们对n的猜测不同,赤字本身并不是很大。我们也许可以通过考虑cn^2 - h(n)形式的边界来结束它,其中ho(n^2)。为什么要减法呢?如果我们使用h作为候选边界,我们将运行赤字;减去h,我们将运行盈余。h的常见选择是低阶多项式或log n。让我们试试cn^2 - n

代码语言:javascript
运行
AI代码解释
复制
T(n)  = 4T(n/2) + n
     <= 4(c(n/2)^2 - n/2) + n
      = cn^2 - 2n + n
      = cn^2 - n

这恰好是递归的精确解决方案,这对我来说是相当幸运的。如果我们猜到了cn^2 - 2n,我们就会有一些剩余的积分。

代码语言:javascript
运行
AI代码解释
复制
T(n)  = 4T(n/2) + n
     <= 4(c(n/2)^2 - 2n/2) + n
      = cn^2 - 4n + n
      = cn^2 - 3n,

它比cn^2 - 2n稍微小一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16061157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档