算法及基础知识
算法的定义与特性
定义:指的是对特定问题求解步骤的一种描述,是若干指令的有穷指令
特性:
- 输入——有零个或多个输入,来源于外界提供或自己产生
- 输出——有一个或多个输出
- 确定性——组成算法的每条指令必须有确定的含义,无歧义
- 有限性——算法中每条指令的执行次数都是有限的,执行每条指令的时间也是有限的
- 可行性——一个算法是可行的,即算法中描述的操作都可以通过已经实现的基本运算执行有限次后实现
算法的描述方式:常用的描述方式有自然语言、图形、程序设计语言、伪代码等
算法与程序的区别
算法是程序设计的精髓,程序是算法用某种程序设计语言的具体实现,程序设计的实质就是构造解决问题的算法
数据结构+算法=程序,数据结构是算法的基础
算法设计的一般过程
- 充分理解要解决的问题
- 数学模型拟制
- 算法详细设计
- 算法描述
- 算法思路的正确性验证
- 算法分析
- 算法的计算机实现和测试
- 文档资料的编制
算法分析
空间复杂性
一个算法在运行过程中所占用的存储空间大小的度量,一般记为S(n)。
时间复杂性
是对算法运行时间长短的度量。度量的方法通常有两种:时候统计法和事前分析估计法
事后统计法和事前分析估算法
*渐进复杂性态(当问题规模足够大时近似于时间复杂性)
O(f(n)),算法运行时间的上界,也就是最坏情况下的时间复杂度;
Ω(f(n)),算法运行时间的下界,也就是最好情况下的时间复杂度;
Θ(f(n)),这里Θ(f(n))是渐近的确界, 有的算法没有Θ(f(n))。
关于n的一个m多项式,T(n)=O(n^m),T(n)=Ω(n^m),T(n)=Θ(n^m)
O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
详见书p10
递归
子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,称为递归
直接或间接调用自身的算法称为递归算法
算法的基本思想是自己调用自己
求解问题的步骤
1)分析问题,寻找递归关系。找出大规模问题和小规模问题的关系。
2)找出停止条件,该停止条件用来控制递归何时终止
3)设计递归算法、确定参数,即构建递归体
常用数学公式:书P27