我们更多考虑的是如何优化算法的时间复杂度

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
➢包括时间复杂度和空间复杂度
算法评价
➢例如:在下列三个程序段中, ① x:=x+1 ② for i:=1 to n do x:=x+1; ③ for j:=1 to n do for k:=1 to n do x:=x+1
➢ 含基本操作“x增1”的语句x:=x+1的频度分 别为1,n和 n2 ,则这三个程序段的时间复杂 度分别为O(1),O(n),O(n2),分别 称为常量阶、线性阶和平方阶。
➢由于算法的时间复杂度考虑的是对于问题 规模n的增长率,在实际计算的时候,一般 只需求出它关于n的增长率或阶乘即可,不 需要考虑常数项、低阶项和系数。
时间复杂性
➢for i := 1 to n-1 do
➢ for j := 1 to i-1 do

x := x+1
➢语句x := x + 1的执行次数为(n-1)*(n-2)/2 = 0.5n2-1.5n+1
➢我们在考察其时间复杂度的时候,只看它 的最高阶,忽略系数、低阶和常数,因此 它的时间复杂度为O(n2)。
时间复杂性
➢对于大多数算法而言,其时间复杂性会根 据输入数据的不同而不同
➢最佳时间复杂度:根据最优输入数据得到的最 小值。
➢最差时间复杂度:根据最差输入数据得到的最 大值。
➢平均时间复杂度:根据概率、统计计算出来的 对所有输入数据的平均值。
复杂度计算举例
read(n, x); for i := 0 to n do
时间复杂性
➢算法在计算机中运行需要耗费一定的时间, 它大致等同于计算机执行简单操作(如赋 值操作、比较操作等)所需的时间与算法 中进行简单操作的次数的乘积。
➢通常我们把算法中所包含的简单操作的次 数的多少称为“算法的时间复杂性”。
时间复杂性
➢ x := x+1; ➢ for i := 1 to n do x := x+1; ➢ for i := 1 to n do for j := 1 to n do x := x+1; ➢ for i := 1 to n do
算法评价
泰州二附中 谢志锋
什么是算法
➢算法是在有限步骤内求解某一问题所使用 的一组定义明确的规则。是对特定问题求 解步骤的一种描述,它是指令的有限序列, 其中每一条指令表示一个或多个操作。
算法的特征
➢确定性:算法的描述必须无歧义,算法的 执行结果是确定的。
➢可行性:算法中所描述的操作都是可以通 过已经实现的基本运行执行有限次来实现。
for j := 1 to n do begin c[i,j] := 0; for k := 1 to n do
c[i,j] := c[i,j] + a[i,k] * b[k,j]; end;
时间复杂性
➢一般情况下,算法中基本操作重复执行的 次数是问题规模n的某个函数f(n),算法的 时间度量记作:T(n)=O(f(n))
➢算法的空间复杂性一般也以关于数量规模n 的数量级形式给出。
空间复杂性
➢类似于时间复杂度,我们用空间复杂度作 为算法所需存储空间的度量
➢S(n) = O(f(n))
复杂度计算举例
➢编程计算anxn+an-1xn-1+……+a1x+a0的值。 ➢当a0~an和x都已知的情况下,我们很容易
写出下面的代码段
➢有穷性:算法必须在有限步后结束。 ➢输入:一个算法必须有零个或多个输入量。 ➢输出:一个算法必须有一个或多个输出量,
没有输出的算法是毫无意义的。
算法的描述
➢自然语言描述 ➢图形描述:如流程图、NS图等。 ➢伪代码描述:包含程序设计语言的三大基
本结构及自然语言的一种语言。 ➢类语言描述:类似高级语言的语言,如类C、
算法评价
➢算法评价主要从算法的正确性、可读性和 复杂性三个方面考虑。
➢正确性是评价算法的首要条件。一个正确的算 法是指在合理的输入数据下,能在有限的运行 时间内得到正确的结果。
➢可读性有助于阅读程序、证明算法正确性、便 于编写、调试、修改程序。
➢复杂性分为时间复杂性和空间复杂性,用于评 价算法在运行时间和占用空间上的程度。
➢ 高效率和低存储:处理速度快、存储容量小。
一个问题?
求 S=20+21+22+23……+2n
解法1:用循环求2i,再累加求和
解法2:利Hale Waihona Puke Baidu2i=2i-1*2,再累加求和
解法3:公式2n+1-1
算法评价
➢有时求解同一个问题常常有多种可用 的算法,在一定的条件下当然要选择 使用好的算法。用什么方法评估算法 的好坏呢?通常使用算法复杂性这一 概念来评估算法。
算法评价
➢一个算法是由控制结构(顺序、分支和循 环三种)和原操作(指固有数据类型的操 作)构成的,则算法时间取决于两者的综 合效果。
➢为了便于比较同一问题的不同算法,通过 的做法是,从算法中选取一种对于所研究 的问题(或算法类型)来说是基本运算的 原操作,以该基本操作重复执行的次数作 为算法的时间度量。
时间复杂性
➢通常情况下,最佳时间复杂度和最差时间 复杂度是比较容易得到的,但意义不大。 平均时间复杂度计算比较繁琐,但可以比 较客观的衡量一个算法所需的运行时间级 别。
空间复杂性
➢算法在运行过程中所占用的存储空间的大 小被称为“算法的空间复杂性”。
➢它包括了算法中变量、常量所占用的存储 空间和系统为了实现递归而使用的堆栈空 间。
类Pascal等。
算法的设计要求
➢ 正确性
➢ 程序不含语法错误; ➢ 程序对几组输入数据能够得出满足规格要求的结果; ➢ 程序对精心选择的、典型的、苛刻的、带有刁难性的
几组输入数据能够得出满足规格要求的结果;
➢ 程序对一切合法的输入数据都能产生满足规格要求的 结果。
➢ 可读性:有助于阅读和交流、有助于对算法的理 解、有助于对算法的调试和修改。
➢它表示问题规模n的增大、算法执行时间的 增长率和f(n)的增长率相同,被称为算法的 渐进时间复杂度,简称时间复杂度。
时间复杂性
➢常见的算法时间复杂度有O(1), O(n), O(log2n), O(nlog2n), O(n2), O(n3), O(2n)等。
➢当n很大的时候,O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n)
相关文档
最新文档