——————对于 屈婉玲 《算法设计与分析》的总结
图片来自电子书或教学视频
算法的特点:
- 算法的特点有:有穷性、可行性、确定性、输入性、输出性。(程序可以是无穷的——操作系统)
- 算法的时间复杂度是对算法效率的度量。
- 最坏情况下的时间复杂度代表了该算法求解输入规模为n的实例所需要的最长时间W(n);而平均情况下的时间复杂度代表了该算法求解输入规模为n的实例所需要的平均时间A(n)。
即,在数组中的情况+不在数组中的情况。
算法的数学基础:
一、函数的渐进的界
定义
注意:
- f(n)=O(g(n)),f(n)的阶不高于g(n)的阶。
- O与o、Ω与w的区别,O和Ω是闭区间,o和w是开区间。
- 由 f(n)=o(g(n)) 可以推出 f(n)= O(g(n)),但是反过来不行。类似的Ω和w也有相同的性质。
- (1)和(2)要求存在一个与n无关的常数 c,所以只需要关注非常大的n满足这个不等式即可。而(3)和(4)中的 c 不是常数,它可以任意小。
- 如果上界与下界的阶相等,f(n)=θ(g(n)),此时f(n)与g(n)的增长仅差一个常数因子,也称作g(n)是f(n)紧的界。
下界为O(1) ——**可能是,如果不对欢迎指正鸭**
定理一
以下给出的证明:
例题: 估计函数的阶
一些重要结果
- 多项式函数的阶低于指数函数的阶。(两个函数相除求极限,利用洛必达法则即可证明)
- 对数函数的阶低于幂函数的阶。
O( logn) <O(n^1/10000000000)
定理二
函数的阶之间的关系具有传递性。
定理三
该性质可以推广到有限个函数。
算法由有限个步骤构成,若每一步的时间复杂度函数的上界都是h(n),那么该算法的时间复杂度函数可以写作O(h(n))。
总结
- 估计函数阶的方法:
计算极限
阶具有传递性 - 对数函数的阶低于幂函数的阶,多项式函数的阶低于指数函数的阶。
- 算法的时间复杂度是各步操作时间之和,在常数步的情况下取得最高阶的函数即可。
几类重要的函数
一、对数函数
常用简写的符号:
性质:
证明:
性质二证明:
性质三证明:
二、指数函数于阶乘
应用:估计搜索空间的大小
m元钱、投资n个项目的分配方案数。应用组合数估计。
- 以上证明得 n! 与 nlog(n) 同阶。
三、取整函数
定义:
性质:
例题:按照阶排序(由高到低)
答案: