用big-O证明N ^ 2是O(2 ^ N)

时间:2012-07-12 06:20:01

标签: big-o proof

我可以清楚地看到N ^ 2受到c2 ^ N的限制,但我如何通过使用big-O的正式定义来证明它。我可以简单地通过M.I.证明。

这是我的尝试.. 根据定义,对于任何n> n0,存在常数C     f(n)< = Cg(n) 哪里     f(n)= n ^ 2 和     g(n)= 2 ^ n

我应该将日志带到两边并解决C吗?

还有一个关于斐波纳契序列的问题,我想解决递归关系。

int fib(int n){
   if(n<=1) return n;
   else return fib(n-1) + fib(n-2);

等式是......     

T(n) = T(n-1)+T(n-2)+C // where c is for the adding operation
所以
T(n) = T(n-2) + 2T(n-3) + T(n-4) + 3c 

还有一个

T(n) = T(n-3) + 3T(n-4) + 3T(n-5) + T(n-6) + 6c

然后我开始迷失形成一般方程式i 这种模式有点像帕斯卡三角形?

 t(n) = t(n-i) + aT(n-i-1) + bT(n-i-2) + ... + kT(n-i-i) + C 

3 个答案:

答案 0 :(得分:7)

正如你所指出的,看看 f(x)εO(g(x))你需要找到......

  • ......一些 c&gt; 0
  • ...某些 x 0

使得 f(x)<所有 x&gt;的c·g(x) X <子> 0

在这种情况下,您可以选择 c = 1 x 0 = 2 。您需要证明的是

x 2 &lt;所有 x> 2 x 2

此时您可以记录双方(因为如果记录( x )&gt; log( y ),那么 x&gt; y 。)假设您使用的是base-2 log,那么您将获得以下内容

log(x 2 )&lt;日志(2 X

根据对数的标准定律,你得到

2·log(x)&lt; X·日志(2)

由于 log(2)= 1 ,因此可以写为

2·log(x)&lt; X

如果我们设置 x = 2,我们会得到

2·log(2) = 2

并且由于 x log(x)增长得快,我们知道 2·log(x)&lt; x 适用于所有 x&gt; 2

答案 1 :(得分:0)

改进接受的答案:

你必须证明x ^ 2&lt;所有x> 2的x ^ 2

双方登录,我们必须证明: 2·log(x)&lt; x表示所有x&gt; 2

因此,我们必须显示所有x> 2的函数h(x)= x-2·log(x)> 0

H(2)= 0

区分h(x)相对于x,我们得到h'(x)= 1 - 1 /(x·ln(2))

对于所有x> 2,h'(x)总是大于0,因此h(x)保持增加,并且因为h(2)= 0, 因此证明h(x)>所有x> 0的0 2, 或x ^ 2&lt;所有x> 2的x ^ 2

答案 2 :(得分:0)

在大多数情况下,接受的答案(来自 aioobe)是正确的,但需要进行重要的更正。

是的,对于 x=2,2×log(x) = x2×log(2) = 2 是正确的,但随后他错误地暗示了2×log(x) < x 对所有 x>2 为真,但不为真。

让我们取 x=3,所以等式变成:2×log(3) < 3(一个无效的等式)。

如果你计算这个,你会得到:2×log(3) ≈ 3,16993,它大于 3。

如果绘制 f(x) = x2g(x) = 2x,您可以清楚地看到这一点 或者如果您绘制 f(x)= 2×log(x)g(x) = x(如果 c=1)。

f(x)=x2 and g(x) =2n plotted

在 x=2 和 x=4 之间,您可以看到 g(x) 将低于 f(x)。只有当 x 4 时,f(x) 才会保持 c×g(x)。

所以为了得到正确的答案,你按照 aioobe 的答案中描述的步骤,但是你绘制函数以获得最后交集,其中 f(x) = c×g(x )。那个交点处的 x 是你的 x0(连同选择的 c),以下是正确的:f(x) c×g(x ) 对于所有 x x0

所以对于 c=1 应该是:对于所有 x≥4,或 x0=4