渐近符号

时间:2013-04-17 13:19:14

标签: algorithm complexity-theory

根据我的研究:我被要求确定一个函数相对于另一个函数的复杂性。即,给定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 ,而步骤的基本概要是针对所有这些问题。

1 个答案:

答案 0 :(得分:2)

通过主定理可以解决特定的重现,但您可以从替换方法中获得一些反馈。让我们尝试一下cn^3的初步猜测。

T(n)  = 4T(n/2) + n
     <= 4c(n/2)^3 + n
      = cn^3/2 + n

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

T(n) <= cn^3/2 + n
     <= cn^3/2 + cn^3/2
      = cn^3,

所以TO(n^3)。这个推导的有趣部分是我们使用立方项来消除线性项。这样的矫枉过正常常表明我们可以猜到更低。我们试试cn

T(n)  = 4T(n/2) + n
     <= 4cn/2 + n
      = 2cn + n

这不起作用。右边和我们想要的边界之间的差距是cn + n,这是我们想要的边界的大Theta。这通常意味着我们需要更高的猜测。我们试试cn^2

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

T(n)  = 4T(n/2) + n
     <= 4(c(n/2)^2 - n/2) + n
      = cn^2 - 2n + n
      = cn^2 - n

这恰好是复发的确切解决方案,这对我来说相当幸运。如果我们改为猜测cn^2 - 2n,我们就会留下一些信用。

T(n)  = 4T(n/2) + n
     <= 4(c(n/2)^2 - 2n/2) + n
      = cn^2 - 4n + n
      = cn^2 - 3n,

略小于cn^2 - 2n