在证明和反驳明确表示使用定义来证明和反驳的大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问题的良好算法方法吗?
答案 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)”留作练习。