证明算法的Big-O运行时

时间:2018-10-04 01:21:18

标签: algorithm time-complexity big-o

我正在尝试学习如何正确证明BigO。

我想做的是找到给定功能的C和N0。

Big-O的定义是

  

让f(n)和g(n)是将非负整数映射为实数的函数。   如果存在一个实常数c> 0和一个整数,我们说f(n)为O(g(n))   常数n0≥1,使得对于所有n≥n0,f(n)≤c g(n)。

鉴于多项式(n + 1)^ 5,我需要证明它的运行时间为O(n ^ 5)。

我的问题是,如何从上面的定义中找到这样的c和N0,以及如何继续代数查看它是否运行n ^ 5?

到目前为止,我尝试通过归纳法

  

(n + 1)^ 5 = n ^ 5 + 5n ^ 4 + n ^ 3 + 10n ^ 2 + 5n ^ 1 + n ^ 0

找到n + 1个元素

  

n ^ 5 + 5n ^ 4 + n ^ 3 + 10n ^ 2 + 5n ^ 1 + n ^ 0 <= n ^ 5 + 5n ^ 5 + n ^ 5 + 10n ^ 5 + 5n ^ 5 + n ^ 5

     

n ^ 5 + 5n ^ 4 + 10n ^ 2 + 5n +1 <= 22n ^ 5

1 个答案:

答案 0 :(得分:1)

您想要一个常量 c ,以使(n + 1) 5 ≤c n 5 。为此,您不需要归纳,只需一点代数,事实证明您实际上已经找到了这样的 c ,但是在此过程中错过了n 0 。因此,让我们从头开始。

请注意, c 不必太紧,它可能比必要的要大,并且仍然会证明时间复杂性。我们将利用这一优势。

我们可以像您一样先开发左侧。

  

(n +1) 5 = n 5 + 5n 4 + 10n 3 + 10 n 2 + 5n +1

对于 n≥1 ,我们有 n,n 2 ,n 3 , n 4 ≤n 5 ,因此。

  

(n +1) 5 ≤(1 + 5 + 10 + 10 + 5 +1)n 5 = 22n 5

然后您得到一个 c ,使得(n + 1) 5 ≤c n 5 c 22

而且由于我们上面说过,如果 n≥1 成立,那么我们就有 n 0 = 1

泛化

这可以概括为任何程度。通常,给定多项式 f(n)=(n + a) b ,那么您就会知道存在一个找到的数字 c 通过将开发后的多项式的所有系数求和。事实证明 c 的确切值无关紧要,因此您无需计算它,所有事情是我们证明了它的存在,因此(n + a) b O(n b