1.算法
1.1 定义:
对特定问题**求解方法和步骤**的一种描述
**指令**的**有限序列** (指令表示一个或多个操作)
1.2描述:
- 自然语言 : 英语 中文
- 流程图 : 传统框图 NS流程图
1.3 算法与程序
算法考虑如何从输入转换为输出,一个问题有多个算法
程序 用某种语言对算法具体实现
*程序= 数据结构+ 算法
数据结构通过算法实现操作
算法根据数据结构设计程序*
1.4 算法特性
- 有穷性
- 确定性 : 每条指令必须有确切的含义
- 可行性
- 输入: 1个或0个输入
- 输出: 1个或多个输出
1.5 算法设计要求
- 正确性 : 不含语法错误/满足典型,有刁难的数据
- 可读性 : 便于人阅读交流,其次才为了计算机执行
- 健壮性 : 非法数据,作出反应进行处理
- 高效性 : 尽量少的时间和尽量低的储存需求
1.6 评价算法
- 时间效率 : 程序在计算机上执行所消耗的时间/一般事前分析,进行估算
假设执行每条语句所需的时间均为单位时间
转化为对算法中所有语句的执行次数,即频度之和
比较 数量级
- 空间效率 : 储存空间
- 二者有时是矛盾的
1.6 算法时间复杂度
定义:
算法中基本语句重复执行次数是 问题规模n 的某个函数f(n)
算法的时间量度记作 :
T(n) = O(f(n)) -----**最高次**
例:x=0;y=0;
for(int k=0;k<n;k++) //n+1
x++; //n
for(int i=0;i<n;i++) //n+1
for(int j=0;j<n;j++) //n*(n+1) 外层n+1次,内部循环n
y++; //n*n
例: N*N矩阵相乘
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
c[i][j]=0;
for(k=1;k<=n;k++)
c[i][j]=c[i][j]+a[i][k]*b[k][i]; //n*n*n
} `
时间复杂度是 由嵌套最深层语句的频度决定的
2.算法时间复杂度计算
注意: 有时,算法中基本操作重复执行的次数还随问题的输入 数据集不同而不同
一般总考虑最坏的时间复杂度
3.空间复杂度
3.1
定义: 算法所需存贮空间的度量
记作: S(n) = O(f(n))
3.2 例