目录
一、定义和特性
1.算法的定义
对特定问题求解方法和步骤的一种描述,它是指令的有限序列。其中每个指令表示一个或多个操作。
2.算法的特性
①有穷性:执行有穷步,且每一步都在有穷时间内完成。
②确定性:每一条指令都有确切的含义,无二义性。
③可行性:算法是可执行的。
④输入:一个算法有零个或多个输入。
⑤输出:一个算法有一个或多个输出。
二、算法的描述
①自然语言
②流程图
③伪代码、类语言
④程序代码
三、算法与程序
程序=数据结构+算法
数据结构通过算法实现操作,算法根据数据结构设计程序。
四、算法的时间复杂度
1.算法时间效率的度量
用执行所消耗的时间来度量。
两种度量方法:事后统计、事前分析。
2.语句频度和运行时间
语句频度:一条语句重复执行次数。
算法运行时间:每条语句执行次数之和×该语句执行一次所需要的时间
3.算法的时间复杂度定义
算法中基本语句重复执行的次数是问题规模n的某个函数f(n)时,
算法的时间量度记作:T(n)=O(f(n)),它表示随着n的增大,算法执行的时间增长率和f(n)的增长率相同,称作渐近时间复杂度,简称时间复杂度。由嵌套最深层语句的频度所决定。
n越大,算法的执行时间越长。
①排序:n为记录数
②矩阵:n为矩阵的阶数
③多项式:n为多项式的项数
④集合:n为元素个数
⑤树:n为树的结点个数
⑥图:n为图的顶点数或边数
例题分析:
i=1;
while(i<=n)
i=i*2
·若执行1次:i=i*2=2
·若执行2次:i=2*2=2的平方
·若执行3次:i=2的平方*2=2的三方
·若执行x次:i=2的x次方
设语句执行x次,由循环条件:i<=n, 所以:2的x次方<=n, 所以x<=log2(n)
即f(n)<=log2(n),取最大值f(n)=log2(n),则时间复杂度T(n)=O(log2(n))
4.时间复杂度计算
最好情况:1次
最坏情况:n次
平均时间复杂度:O(n)
①加法法则:T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
②乘法法则:T(n)=T1(n)×T2(n)=O(f(n))×O(g(n))=O(f(n)×g(n))
T(n)按数量级递增顺序:
五、算法的空间复杂度
S(n)=O(f(n))