1.4 算法分析
热身运动2-sum问题
- 原本N^2问题
- 排序(NlogN) + 二分查找(logN)
递归在本质上,是一个栈结构
递归程序是将复杂问题分解为一系列简单的问题,从要解的问题起,逐步分解,并将每步分解得到的问题放入“栈”中,这样栈顶是最后分解得到的最简单的问题,
解决了这个问题后,次简单的问题可以得到答案,以此类推。
分解问题是进栈(或者说压栈)的过程,解决问题是一个出栈的过程。
大O的定义:
如果存在正数c和N,对于所有的n>=N,有f(n)<=cg(n),则f(n)=O(g(n))
Big Omega的定义:
如果存在正数c和N,对于所有的n>=N,有f(n)>=cg(n),则f(n)=Omega(g(n))
Big Theta的定义:
如果存在正数c1,c2和N,对于所有的n>=N,有c1_g(n)<=f(n)<=c2_g(n),则f(n)=Theta(g(n))
1、big O是一个算法最坏情况的度量(g(n)是这个算法的上界,用上界来衡量,是最坏的情况) 渐进上限
2、Big Omega是的度量(g(n)是这个算法复杂度的下界,用下界来衡量,是最好的情况)
3、Big Theta表达了一个算法的区间,不会好于某某,不会坏于某某
大O是最常用的描述算法性能的指标