算法复杂度的些许补充

上面一篇文章我们给出了算法复杂度的定义以及大致的分析原则,这次,我们要对算法复杂度进行一些必要的细化与补充。让大家能够看明白为什么要遵循那四条原则,或者是一些有用的推论,能够帮助我们提高效率。(主要都是关于复杂度上界的,因为复杂度上界big O符号用的最多)。

还记的我们复杂度分析第二条吗? 忽略低阶项与常数项,我们首先来证明一下这个结论。

Lemma1 : 如果T(n) = a_{k}n^{k} + ... + a_{1}n+a_{0},那么T(n)=O(n^{k}).

Proof:  我们知道big O符号是代表上界的意思。所以我们可以明确知道T(n)的一个上界,就是将所有的系数取绝对值,即T(n)\leq \sum_{i=0}^{k}|a_{i}|n^{i},由于n通常大于等于1,可以看成一个正数。所以,我们可以进一步将这个上界给扩大,即将每一项的n的次数都放大为第一项的n^{k},如此一来我们得到了一个更大的上界T(n)\leq \sum_{i=0}^{k}|a_{i}|n^{k}。然后由于系数a_{i}都是常数,因此我们可以取这样一个常数c= k*{\rm max}(a_{i}), i\in\{0,1,2,....k\},于是就得到了最终的上界T(n)\leq cn^{k}, 证明完毕。

Lemma2:n^{k}\neq \mathcal{O}(n^{k-1})

Proof:通常证明不是的命题,采用反证法,我们假设命题为真,然后目标是推导出一个矛盾点即可。设,n^{k}=\mathcal{O}(n^{k-1}),即存在一个常数c,使得n^{k}=cn^{k-1},然后两边同时化简,得到n=c。由于n是一个变量,理论上可以去到无限大,而c我们知道是一个常数,显然矛盾了。证明完毕。

Lemma3:2^{n+10}= \mathcal{O}(2^{n})

Proof:这个问题不难证明,因为2^{n+10}=2^{10}2^{n},而2^{10}是一个常数,证明完毕。这个例子告诉我们,无论常数是多大,都会被省略。

Lemma4:2^{10n}\neq \mathcal{O}(2^{n})

Proof:设命题成立,即存在常数c,使得2^{10n}=c2^{n},化简得到c= 2^{9n}。等式右边明显不是常数。证明完毕。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值