我正在尝试学习如何正确证明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
答案 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 )。