O method(算法复杂度分析基本方法)
做big O 分析的原因:
- 对于高等级的算法分析要知道其“sweet spot”
- 能超越架构、语言、编译器等进行分析
- 在不同算法之间比较十分有用
三条假设(规则):
- 只针对时间最长(最坏情况做分析)
- 忽略那些常数项和低等级的项
- 只针对输入数据的规格(N)较大的情况下
常见的几种:
O(1),O(logN),O(N),O(NlogN),O(N2),O(2N)
时间复杂度上依次升高

各分析定义:
BIG O 分析的数学定义:
T(N)=O(f(N))的含义是:
如果存在一个C,N0,使所有N>=N0的数都满足:
T(N)<=C∗f(N)
则我们说T(N)=O(f(N))
Ω分析的数学定义:
T(N)=Ω(f(N))的含义是:
如果存在一个C,N0,使所有N>=N0的数都满足:
T(N)>=C∗f(N)
则我们说T(N)=Ω(f(N))
Θ分析的数学定义
T(N)=Θ(f(N))的含义是:
如果存在一个C1,C2,N0,使所有N>=N0的数都满足:
C1f(N)=<T(N)<=C2∗f(N)
则我们说T(N)=Θ(f(N))
练习例子:
22n!=O(2n):反证法
2n+10=O(2n)
2n!=O(2n−1)
max(f,g)=Θ(f+g)