证明和反驳BigO

时间:2010-02-11 21:50:07

标签: algorithm big-o

在证明和反驳明确表示使用定义来证明和反驳的大O问题时,我的问题是,我正在做的是正确的吗?

例如,你有一个问题是g(n)= O(f(n))......为了证明这一点我做了以下

g(n) <= C(F(n))
g(n)/F(n) <= C .. then give n=1 and solve for C , which proves it.

当我这样做时,我遇到的矛盾就是当我接近一个反驳这个东西的问题时

例如

g(n)= O(F(n))反驳它我会做

g(n)> = C(F(n))并再次求解C.然而,这让我相信大O可以立刻被证明和反驳?这是100%的错误。

使用真实世界的数字 (证明)

n^2 + 3 = O(n^2)
(n^2 + 3)/n^2  <= C  assume n = 1 then C >= 3

Disproving

n^2 + 3 = O(n^2)


(n^2 + 3)/n^2  >= C  assume n = 1 then C <= 3

n^2 + 3 = O(n^2)

这两个都说@ n = 1且c = 3算法是O(n ^ 2)且不是O(n ^ 2)。

任何人都可以帮助我澄清我的困惑,并帮助我学习一种解决大O问题的良好算法方法吗?

1 个答案:

答案 0 :(得分:11)

您的技术都不奏效。让我们从big-O的定义开始:

  

f是O(g),如果存在C,N,则| f(x)| ≤C| g(x)|对于所有x≥N

要证明“存在”类型语句,您需要证明存在的事物。在大O证明的情况下,你通常会发现这些东西,虽然存在的证据通常不需要constructive。要为“为所有人”声明建立证据,假装某人只是递给你特定的价值观。注意不要对它们的属性做出隐含的假设(你可以明确地声明属性,例如N> 0)。

在证明big-O的情况下,你需要找到 C N 。显示| g(n)| ≤C| F(n)|对于一个单一的n是不够的。

例如“n 2 +3是O(n 2 )”:

 For n ≥ 2, we have: 
    n2 ≥ 4 > 3
      ⇒ n2-1 > 2
      ⇒ 2(n2-1) > (n2-1)+2
      ⇒ 2n2 > (n2-1)+4 = n2+3
 Thus n2+3 is O(n2) for C=2, N=2.

为了反驳,你取消了陈述:显示没有 C N 。换句话说,显示对于所有 C N ,存在n> N使得| f(n)| &GT; C | g(n)|。在这种情况下, C N 是“为所有人”限定的,所以假装他们已经给你了。由于 n 是合格的“存在”,你必须找到它。在这里,您可以从希望证明的等式开始,然后向后工作,直到找到合适的 n

假设我们想要证明n不是O(ln n)。假装我们给出了N和C,我们需要找到n≥N,使得n> 1。 C nn。

For all whole numbers C, N, let M=1+max(N, C) and n = eM. Note n > N > 0 and M > 0.
Thus n = eM > M2 = M ln eM = M ln n > C ln n. QED.

x的证明&gt; 0⇒e x &gt; x 2 和“n不是O(ln n)”⇒“n不是O(log b n)”留作练习。