算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
1、基本特性:
- 输入输出
- 有穷性
- 确定性
- 可行性
2、设计要求
- 正确性
- 可读性
- 健壮性(当输入不合法时,进行相关处理,而不是出现异常或者是莫名其妙的结果)
- 时间效率高
- 存储量低
3、算法效率的度量方法
- 事后统计法
受硬件影响较大,需要事先实现浪费时间。不推荐。 - 事前分析估计方法
依据统计方法对算法进行估计。
程序在计算机上运行时所消耗的时间取决于:
1、算法的策略、方法。
2、编译产生的代码质量。
3、输入的规模。
4、机器执行指令的速度。
4、算法时间复杂度
使用大O记法
推到大O阶:
1、用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项相乘的常数。
得到的结果就是大O阶。
常数阶:O(1)
线性阶:O(n)
对数阶:O( logn l o g n )
平方阶:O( n2 n 2 ),如果是外循环m,内循环n,那就是O( n×m n × m )
常见时间复杂度
执行次数函数 | 阶 | 非正式术语 |
---|---|---|
12 12 | O(1) O ( 1 ) | 常数阶 |
2n+3 2 n + 3 | O(n) O ( n ) | 线性阶 |
3n2+2n+1 3 n 2 + 2 n + 1 | O(n2) O ( n 2 ) | 平方阶 |
5log2n+60 5 l o g 2 n + 60 | O(logn) O ( l o g n ) | 对数阶 |
2n+3nlog2n+36 2 n + 3 n l o g 2 n + 36 | O(nlogn) O ( n l o g n ) | nlogn阶 |
8n3+2n2+3n+8 8 n 3 + 2 n 2 + 3 n + 8 | O(n3) O ( n 3 ) | 立方阶 |
2n 2 n | O(2n) O ( 2 n ) | 指数阶 |
耗费时间大小排序
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn) O ( 1 ) < O ( l o g n ) < O ( n ) < O ( n l o g n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n )