如何通过归纳证明这两种算法中的第二种更快?

时间:2013-02-20 03:48:05

标签: performance algorithm proof induction

我有两种算法。

A. Solves problem in 2^n seconds.

B. Solves problem in n^2 + 1,000,000 seconds.

我如何归纳证明 B比A快。

我被告知2 ^ n>对于n> 2,2n + 1可能对此问题有用。我一直在低头,无法解决这个问题。感谢。

“n”相当于程序的大小。

编辑:对于所有n> 19。

解决方案:

前提:n ^ 2 + 1,000,000< 2 ^ N

基础:
n = 20
1000400< 1048576是的

诱导:

(n+1)^2 + 1000000 > 2^(n+1)
n^2 +2n +1 +1000000 > 2^(n+1)
Apply 2^n > 2n + 1
n^2 + 1000000 > 2^(n+1)

最后一行暗示B总是大于A.

4 个答案:

答案 0 :(得分:2)

只有当n>时,

B才会更快。 19.9321。如果您不需要实际工作,那么here就是我得到答案的地方。

对于任何小于19.9321的数字,则A会更快。

答案 1 :(得分:2)

正如你所说,基本案例已被证实。 即k^2<2^k for k>=5

对于归纳,让我们假设

k^2<2^k

我们需要证明

(k+1)^2<2^(k+1)

(k+1)^2 = k^2 + 2k + 1 < 2^k + 2k + 1

我们知道(k-1)^2>=0.因此k^2>=2k-1

2^k + 2k + 1 = 2^k + 2k -1 + 2 <= 2^k + k^2 + 2 < 2^k + 2^k +2= 2^(k+1) + 2

唉,我觉得我几乎就在那里。有什么帮助吗?

答案 2 :(得分:1)

Python作为计算器:

>>> n = 20
>>>
>>> 2**n
1048576
>>> n**2 + 1000000
1000400
>>>

答案 3 :(得分:1)

不知道使用归纳法,但我认为这可能会有所帮助: 注意,首先,对数是单调递增函数。 所以,   log(a)&gt; log(b)iff a&gt; b(i)

注意log(n ^ 2)&gt; log(n ^ 2 + 1 000 000)(ii)

另外,log(n ^ 2)= 2log(n)

显然,nlog2&gt; 2登录大n, 所以,

     log(2^n) > log(n^2) from (i)

所以,           log(2 ^ n)&gt; log(n ^ 2)&gt; log(n ^ 2 + 1 000 000)来自(ii)

因此,

      log(2^n) >  log(n^2 + 1 000 000) 

再次来自(i),

  2^n > n^2 + 1 000 000
你觉得怎么样?