算法:规则的有限集合,是为解决特定问题而规定的一系列操作
算法的特性:
1.有限性:有限步骤之内正常结束,不能形成无穷循环
2.无二义性:算法中不能拥有二义性
3.输入或输出:至少有一个或多个输入和输出
4.确定性:算法中的每一个步骤必须有确定含义
5.可行性:原则上能精确进行,操作可通过已实现基本运算执行有限次而完成
算法的特性:
1.正确性:一般分为四个层次
(1).程序不含语法错误;(2).程序对于几组输入数据能够得出满足规格说明要求的结果;
(3).程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格要求说明的结果;
(4).程序对于一切合法的输入数据都能产生满足规格说明要求的结果。
例如:要求n个数的最大值问题
max=0;
for(i=1;i<=n;i++)
{
scanf("%f",x)
if(x>max)
max=x;
}
2.可读性:一个程序的命名一般应该按照它的含义,函数的整个结构都要非常的清晰
3.健壮性
4.高效率和低存储量的要求:一般我们需要一个程序的效率是比较高的,占用的存储空间也是比较少的
算法、语言、程序的关系
1.算法:描述了数据对象的元素之间的关系(包括数据逻辑关系、存储关系描述)
2.描述算法的工具:算法可用自然语言、框图或高级程序设计语言进行描述
算法性能分析
评价算法的标准:
一般来说评价一个算法的好坏就是看它的时间和空间,我们主要考虑算法的时间复杂度怎么度量性能评价
定义:对问题规模N与该算法在运行时所占的空间与所消耗的时间给出一个数量关系的评价
问题规模N对不同的问题其含义不同:对矩阵是阶数;
对多项式运算时多项式系数;
对图是顶点个数;
对集合运算是集合中元素的个数;
通常两种衡量算法效率的方法
1.事后统计法:
缺点:1.必须执行程序;2.其他因素掩盖算法本质
2.事前分析估算法
和算法执行时间相关的因素:
(1)算法选用的策略;(2)问题的规模;
(3)编写程序的语言;
(4)编译程序产生的机器代码的质量;
(5)计算机执行指令的速度;
关于算法执行时间
定义:
一个算法的执行时间大致上等于其所有语句执行时间的总和,对于语句的执行时间是指该条语句的执行次数和执行一次所需要的时间的乘积;分析:
不是针对实际执行的时间精确的计算出算法执行具体时间,而是针对算法中基本操作语句(原操作)的执行次数作出估计,从中得到算法执行时间的信息。语句频度
定义:语句频度指的是该语句在一个算法中重复执行的次数
两个矩阵相乘:算法语句 对应的语句频度
1 for(i=0;i<n;i++) n+1
2 for(j=0;j<n;j++) n(n+1)
3 {c[i][j]=0; n²
4 for(k=0;k<n;k++) n²(n+1)
5 c[i][j]=c[i][j]+a[i][j]*b[i][j];(原操作) n³
}
总执行次数:Tn=2n³+3n²+2n+1
算法的时间复杂度
算法的时间复杂度,即是算法的时间量度记做:T(n)=O(f(n))
例如:(1)x=x+1; 时间复杂度为O(1),称为常量阶;
(2)for(i=1;i<=n;i++) x=x+1; 时间复杂度为O(n),称为线性阶;
(3)for(i=1;i<=n;i++)
for(j=1;j<=n;j++) x=x+1; 时间复杂度为O(n²),称为平方阶。
常用的时间复杂度频率计数
数据结构中常用的时间复杂度频率计数有7个:
O(1)常数阶 O(n)线性型 0(n²)平方型 O(n³)立方型 O(2ⁿ)指数型O(㏒2ⁿ)对数型 O(n(㏒2ⁿ)二维型
常用的时间复杂度频率计数表:
算法的空间复杂度:
作为算法所需存储空间的度量,记做:S(n)=O(f(n))
算法的存储量包括:
1.输入数据所占空间;2.程序本身所占空间;
3.辅助变量所占空间;