第一章——算法在计算中的应用
算法
算法就是任何良定义的计算过程,该过程取某个值或值的集合作为输入并产生某个值或值的集合作为输出。
算法分析
算法分析是理论研究,是关于计算机性能和资源利用的研究(尤其关注性能)。
比性能更重要的因素
比如有正确性、简洁性、可维护性、编程成本、稳定性、功能性、模块化、安全性、可扩展性、用户友好度等。
算法的重要性
- 算法将不可行变为可行。
- 算法是一种描述程序行为的语言。
第二章——算法基础
插入排序
- 伪代码
INSERTION-SORT(A)
1 for j ← 2 to n
2 do key ← A[j]
3 // Insert A[j] into the sorted sequence A[1...j-1]
4 i ← j-1
5 while i > 0 and A[i] >key
6 do A[i+1] ← A[i]
7 i ← i-1
8 A[i+1] ← key
A[1…j-1]称为循环不变式:在第1~8行的for循环的每次迭代开始时,子数组A[1…j-1]由原来在A[1…j-1]中的元素组成,但已按序排列。
-
关于循环不变式,必须证明三条性质:
- 初始化:循环的第一次迭代之前,它为真。
- 保持:如果循环的某次迭代之前它为真,那么下次迭代之前它仍为真。
- 终止:在循环终止时,不变式为我们提供了一个有用的性质,该性质有助于证明算法是正确的。
-
运行时间:
- 取决于输入数据的有序性。
- 取决于输入数据的规模。
- 关注运行时间的上限,作为对用户的保证。
-
插入排序时间复杂度为Θ(n^2)
分析算法
RAM模型:算数指令(加减乘除、取余、向上下取整)、数据移动指令(装入、存储、复制)和控制指令(条件与无条件转移、子程序调用与返回)
分治法
将原问题分解为几个规模较小但类似于原问题的子问题,递归求解这些子问题,然后再合并这些子问题的解来建立原问题的解。
归并排序
归并排序的分析
- 归并排序的时间复杂度:Θ(nlgn)
来源:https://blog.csdn.net/qq_40996183/article/details/100084210