第一章 绪论
Concepts of Algorithms
Analyzing Algorithms
算法的正确性分析
程序调试只能证明程序有错、不能证明程序无错误
算法的复杂性分析
1、时间复杂性T(n):是输入大小的函数、该算法对该输入产生结果需要的原子操作数 2、空间复杂性S(n):是输入大小的函数、该算法对该输入产生结果需要的存储空间大小
例:直接插入排序算法的复杂性分析,直接插入排序算法如图:
算法的正确性分析
主要步骤: 1、确定循环不变量P(谓词) 2、三个步骤: - 循环初始:P成立 - 循环步骤:每执行一次、P都成立 - 循环终止:循环结束后、P依旧成立
例:插入排序 1、首先定义循环不变量P。对于任意循环变量j,A[1,…,j-1]中的数据都是有序的 2、再执行三个步骤。发现循环开始前和每一次循环后以及循环彻底结束后,A[1,…,j-1]中的数据都是有序的,即循环不变量恒成立。所以算法正确。
Designing Algorithms
- Divide-and-Conquer——分治算法
- Dynamic Programming——动态规划
- Greedy Algorithms——贪心算法
第二章 算法分析的数学基础
计算复杂性函数的阶
同阶函数
设f(n)和g(n)是正值函数。如果存在c1, c2>0, n0 , 存在n>n0, c1g(n)≤f(n)≤c2g(n),则称f(n)与g(n) 同阶,记作f(n)=θ(g(n))。
|