算法运行时间分析
时间复杂度:O(n)
注意O(n)是用估计的方式,涉及极限的定义,假设摸个程序的语句执行次数为,则其时间复杂度为中较大的影响最大的增量函数
例如:其时间复杂度 O(n) =
描述 | 增长量级 | 典型代码 | 说明 | 举例 |
常数级别 | 1 |
| 普通语句 | 两数相加 |
对数级别 |
| 二分策略 | 二分查找 | |
线性级别 | N |
| 循环 | 自增 |
线性对数级别 |
| 分治 (固定次数内部出现二分策略) | 归并排序 | |
平方级别 | 二重循环,懒得写了 | 二重循环 | 二维数组的遍历 | |
立方级别 | 三重循环,懒得写了 | 三层嵌套 | 三维数组的遍历 | |
指数级别 | 穷举算法,基本暴力算法都是,最典型的是RSA大数因式分解,到了这个级别的基本就GG了,但很多问题似乎只能用这个 | 穷举查找 | RSA质因数分解
|
其他评估:
- 可行性(先进行算法评估,能否实现,运行时间是否满足要求)
- 计算机本身性能(尽量使用更快的计算机)
- 大常数(因为O(n)是极限的思想,但算法的运行时间必须有限,这时候有可能出现常数对算法的影响不亚于高阶增长,不能舍弃,其他项亦然)
- 非决定性的内循环(存取数据需要时间等等)
- 指令时间
- 系统因素(多任务)
- 应用场景(不同的场景,不同算法优劣性不同)
- 输入输出依赖(因为输入输出耗时)
- 多问题参量(还有其他额外条件限制)
其他:
- 最坏情况和最好情况(上下界)
- 随机化算法
- 操作序列
- 均摊分析