前言
算法分析是关于计算程序性能和资源利用的理论研究。
比性能更重要的要素:
- 模块性
- 准确性
- 可维护性
- 功能性
- 健壮性
- 用户友好
- 程序开发耗时
- 简易性
- 可扩展性
- 可靠性
为什么学习算法分析:
- 有时性能直接决定程序可行或者不可行
- 算法是一种描述程序行为的语言
sorting example
排列:我们输入一组序列 ,输出 ,
算法时间复杂度:
- 输入本身,如果输入本身排序好了,时间复杂度就很小
- 输入的规模,比如序列长短
- 通常讨论算法的最坏情况耗时
分析的种类
- 最坏情况分析: 定义为输入规模为n时的最长运行时间。
- 平均情况: 定义为输入规模为n时的期望运行时间。
- 最好情况
算法时间分析
取决于电脑:
- 相对速度(同一电脑)
- 绝对速度(不同电脑)
算法的大局观(渐进分析):
- 忽略依赖于机器的常量
- 不检查实际的运行时间,关注运行时间的增长(舍弃低阶)
,当n足够大, 终究会优于 。渐进符号的伟大之处在于,满足我们对相对和绝对速度的双重比较要求(不同的计算平台只是相差一个常数)。
插入排序
插入排序介绍
描述:先取定位置j,将j这个位置上的元素插进前j-1的序列(此时前j-1个元素的序列是排序好的了),j从2到n。
插入算法复杂度分析
最坏情况:
归并排序
归并排序介绍
描述:n不为1时,将序列前后分两部分,两部分排序后只要对这两个已排序序列的头元素进行比较,按顺序输出到最后结果。
归并算法复杂度分析
,利用迭代的思想。
在渐进情况下小于
,因此归并排序优于插入排序。