1.2.1算法的定义
---------------------------------------------------------------------------------------------------------------------
概念:
算法是对特定问题求解步骤的一种描述。是指令的有限序列。其中一个指令表示计算机的一个或多个操作
如求 两个正整数m n 的最大公约数
算法描述:
(1)r =m mod n
(2)若r =0 输出最大公约数n ,算法结束
(3)若r不等于 0 令m=n n=r, 转(1)继续
算法的5个特性
(1)有穷性
有穷步后停下,每步在有穷时间内完成
(2)确定性
每个步骤的执行在算法中有确切规定,使读者用明白,且操作不具有二义性
(3)可行性
算法中的所有步骤必须足够基本,算法能在有限次基本操作后完成,可被机械的执行
(4)有输入
(5)有输出
算法与程序的区别
程序是指使用某种计算机语言对一个算法的具体实现
而算法是解决某个问题的有限步骤的一种描述
打个比方:
对于上面的求最大公约数的算法来说 我们的三个步骤是一个算法设计
而我们使用c语言去编写那三个步骤得到的便是程序
对于一个算法来说 可能有多种程序的编写形式,算法必须满足又穷性,而程序不一定曼珠有穷性
--------------------------------------------------------------------------------------------------------------
1.2.2 算法设计的目标
(1)正确性
(2)可使用性
便于使用 也叫用户友好型
(3)可读性
易于理解
(4)健壮性
具有容错性不易出现异常中断和死机现象
(5)高效率与低存储量需求
---------------------------------------------------------------------------------------------------------------------
1.2.3 算法分析
一、算法的时间性能分析
两种衡量算法时性能的方法
1、事后统计法
即编写算法对应程序,统计其执行时间
缺点 : (1) 必须执行程序
(2)存在很多其他因素掩盖算法的本质
2、事前估量法
撇开上述因素,认为算法的执行时间是问题规模n 的函数
算法的时间复杂度分析
我们描述一个算法的时间性能,通常用算法的时间复杂度进行描述
一个算法由控制结构(顺序,分支,循环)和原操作组成
我们将算法所有原操作的执行次数即算法的频度 T(n)用于衡量一个算法的时间性能
n:为问题的规模 如对10个数排序 问题规模即为10
O(T(n))
对于求出一个算法的T(n)后,通常进一步求T(n)的数量级
记 T(n)=O(f(n)) 为算法的时间复杂度
即若 T(n)=2n^3+5n+4 = O(n^3) 该算法的时间复杂度为O(n^3)
求大O阶的技巧就是直接取最大阶数的项,将系数变为1
一个问题目前可以用多项式时间复杂度算法来解决 称此类问题为P问题
一个问题目前只能用指数时间复杂度算法解决 称为NP问题
NP=P是否成立(即NP问题能不能转换为P问题),是计算机界难题之一
某算法的时间复杂度为O(n^2) 表面该算法的执行时间与n^2成正比
简化的时间复杂度算法
简化的方式求得的时间复杂度与没有简化的是一样的,但更好计算 因此以后采用简化的方法计算
例题
解释;
1、s=1+2+3+……m=m(m+1)/2
2、求解 m(m+1)/2+k=n
用公式法求解二元一次方程
时间复杂度的求和求积定理
(1)求和定理:
假设T1(n)和T2(n)是程序段P1和P2的执行时间,那么顺序 执行P1、P2的总执行时间T1(n)+T2(n)=O(MAX(f1(n),f2(n)))。 例如:多个并列的循环。
(2)求积定理:
假设T1(n)和T2(n)是程序段P1和P2的执行时间,那么 T1(n)×T2(n)=O(f1(n)×f2(n))。 例如:多层嵌套循环。
算法的最好最坏,平均复杂度
定义:设一个算法的输入规模为n,Dn是所有输入的集合, 任一输入I∈Dn,P(I)是I出现的概率,有 ,T(I)是 算法在输入I下的执行时间,则算法的平均时间复杂度为:
最好时间复杂度 就是在最好情况下的时间复杂度 如查找算法中 一个就是要找的元素
最坏时间复杂度 就是在最坏情况下的时间复杂度 查找算法中最后一个才是要的元素
二、 空间复杂度
空间复杂度:用于量度一个算法运行过程中临时占用 的存储空间大小。算法空间复杂度分析 一般也作为问题规模n的函数,采用数量级形式描 述,记作:S(n) = O(g(n))
若一个算法的空间复杂度为O(1),则称此算法为 原地工作或就地工作算法。