算法复杂度分析方法

来源:互联网 发布:c语言如何读取字符串 编辑:程序博客网 时间:2024/06/03 14:59

递推与循环类

寻找基本操作与问题的规模,就可以求出其问题的复杂度。
只要存在一个常数C,n0使得f(n)<=Cg(n),那么g(n)就是上界,下界同理。当上界和下界相等时,那么这个复杂度也是近似复杂度。
基于比较的排序算法的时间复杂度下界为O(nlogn).
1. n个不同的元素,可能的大小顺序一共有n!
2. 抽两个元素a,b,要么a<b,要么a>b,所以两种情况包含了n!种可能性,所以有一种至少包含了n!2种可能性,假如每次都留下了可能性较多的一种。
3. 再抽两个元素比较,在剩下n!2种可能性,又会有少于一半的可能性被排除,于是顺序种类从n!下降到大于等于n!4
4. 每比较一次,可能的顺序最多下降一半,所以要想让顺序种类减到1,需要的x次,必定满足2x>=n!
(换一种说法,x次比较最多得出2x个不同的结果,它必须要比n!大,才能区分所有的情况)
于是我们就可以得到x>=log2n!,又因为n!2πn(ne)n

原创粉丝点击