上面一篇文章我们给出了算法复杂度的定义以及大致的分析原则,这次,我们要对算法复杂度进行一些必要的细化与补充。让大家能够看明白为什么要遵循那四条原则,或者是一些有用的推论,能够帮助我们提高效率。(主要都是关于复杂度上界的,因为复杂度上界big O符号用的最多)。
还记的我们复杂度分析第二条吗? 忽略低阶项与常数项,我们首先来证明一下这个结论。
Lemma1 : 如果,那么.
Proof: 我们知道big O符号是代表上界的意思。所以我们可以明确知道T(n)的一个上界,就是将所有的系数取绝对值,即,由于n通常大于等于1,可以看成一个正数。所以,我们可以进一步将这个上界给扩大,即将每一项的n的次数都放大为第一项的,如此一来我们得到了一个更大的上界。然后由于系数都是常数,因此我们可以取这样一个常数,于是就得到了最终的上界, 证明完毕。
Lemma2:。
Proof:通常证明不是的命题,采用反证法,我们假设命题为真,然后目标是推导出一个矛盾点即可。设,,即存在一个常数c,使得,然后两边同时化简,得到n=c。由于n是一个变量,理论上可以去到无限大,而c我们知道是一个常数,显然矛盾了。证明完毕。
Lemma3:。
Proof:这个问题不难证明,因为,而是一个常数,证明完毕。这个例子告诉我们,无论常数是多大,都会被省略。
Lemma4:
Proof:设命题成立,即存在常数c,使得,化简得到。等式右边明显不是常数。证明完毕。