注:O(g(n))={f(n):存在大于0的常数c 和非负整数n0,使得任意n>=n0,有0<=f(n)<=cg(n)}
则g(n)为f(n)的渐进上界。其余同理。
O的运算规则:
1.O(f)+O(g)=O(max(f,g))
2.O(f)+O(g)=O(f+g)
3.O(f)O(g)=O(fg)
4.如果g(N)=O(f(N)),则O(f)+O(g)=O(f)
5.O(Cf(N)=O(f(N)),其中C是一个正的常数
6.f=O(f)
Addition:
分析非递归算法效率的通用方案:
- 决定用哪个(哪些)参数作为输入规模的度量
- 找出算法的基本操作(通常位于内层循环)
- 检查基本操作的执行次数是否依赖于输入规模。如果它还依赖一些其他特性,则最差、平均及最优效率需要分别研究
- 建立一个算法基本操作执行次数的求和表达式
- 利用求和运算的标准公式和法则来求解,或至少确定它的增长次数
分析递归算法效率的通用方案:
- 决定用哪个(哪些)参数作为输入规模的度量
- 找出算法的基本操作
- 检查对于相同规模的不同输入,基本操作的执行次数是否不同。如果不同,则最差、平均及最优效率需要分别研究
- 对于算法基本操作执行次数,建立一个递推关系以及相应的初始条件
- 解递推式,或至少确定它的增长次数