算法分析基础.ppt_第1页
算法分析基础.ppt_第2页
算法分析基础.ppt_第3页
算法分析基础.ppt_第4页
算法分析基础.ppt_第5页
免费预览已结束,剩余65页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章 算法分析基本概念,曹霑懋 ,算法设计技巧与分析,Chapter 1 Basic Concepts in Algorithmic Analysis 内容,1.1 Introduction l.2 Historical Background 1.3 Binary Search 1.3.1 Analysis of the binary search algorithm 1.4 Merging Two Sorted Lists 1.5 Selectinn Sort 1.6 Insertion Sort 1.7 Bottom-Up Merge Sorting 1.7.1 Analysis of

2、bottom-up merge sorting,2020/12/3,华南师范大学 计算机学院,2,1.8 Time Complexity 1.8.1 Order of growth 1.8.2 The O-notation 1.8.3 The fl-notation l.8.4 The e-notation 1.8.5 MamPles 1.8.6 Complekity classes and the o-notation 1.9 Space Complexity 1.10 Optimal Algorithms,2020/12/3,华南师范大学 计算机学院,3,Chapter 1 Basic C

3、oncepts in Algorithmic Analysis 内容,2020/12/3,华南师范大学 计算机学院,4,1. 1 引言,Donald E. Knuth: 计算机科学就是算法的研究. 每个领域: 依赖 有效算法设计 运行时间: 由例子到理论 时间是衡量算法有效性的最好测度 算法的几个方面: 输入 有限指令集 输出 (存在? Y/N),2020/12/3,华南师范大学 计算机学院,5,算法概念,算法是程序设计的精髓,程序设计的实质就是细化构造解决问题的算法,将其解释为计算机语言。 算法是在有限步骤内求解某一问题所使用的一组定义明确的指令(规则)。通俗点说,就是计算机解题的过程。在这

4、个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。 一个算法应该具有以下五个重要的特征: 有穷性: 一个算法必须保证执行有限步之后结束; 确切性: 算法的每一步骤必须有确切的定义; 输入:一个算法有0个或多个输入,以刻画运算对象的初始情况; 输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。,2020/12/3,华南师范大学 计算机学院,6,算法 几点说明,1. “算法”的,2. “算法”的现代诠释,3. 学习“算法”的方

5、法,几个词:Algorithm、Logarithm、Algorism,算法的现代意义十分类似于处方、过程、方法、规程、程序,一个算法就是有穷规则的集合。其中,规则规定了一个解决某一特定类型的问题的运算序列。,一个算法应该是可以信赖的,而且学习一个算法直到彻底掌握的最好方法是反复进行试验。 因此,遇到一个算法时,应该找出这个算法的一个例子,给出该例子的要点进行试验。,2020/12/3,华南师范大学 计算机学院,7,程序是算法用某种程序设计语言的具体实现。 程序可以不满足算法的有限性的性质。例如操作系统,是一个在无限循环中执行的程序,因而不是一个算法。 操作系统的各种任务可看成是单独的问题,每一

6、个问题由操作系统中的一个子程序通过特定的算法来实现。该子程序得到输出结果后便终止。,程序(Program),2020/12/3,华南师范大学 计算机学院,8,1.2 历史背景,20世纪,早期, 30年代 能否用有效的过程来求解问题受到关注 问题分类为:可解、不可解(存在有效过程来求解问题) 计算模型:存在模型,用此模型能建立一求解某问题的算法,入可解的类 模型列举:歌德尔的递归函数,Church的Lamda演算,Post的波斯特机,Turing机。 Church论断:所有4个模型等效。如果一个问题在某一模型上可解,那么在其他模型上都是可解的。“几乎所有”问题都是不可解的。 确定一个包含N个变量

7、的多项式方程是否有整数解 简单理由陈述:P3Top 可判定性可计算性理论, 可解性计算理论; 有Digital Computer后,对可解问题的研究的要求越来越多。 程序,资源量,尽可能少使用资源(时间,空间)的有效算法的需求。 效率:指解决问题所需时间和空间 排序一组元素的算法作为研究的实例表明:设计了许多有效算法,解决问题的效率将不会因其他方法而有大的提高。,2020/12/3,华南师范大学 计算机学院,9,好的算法所具备的意义,2020/12/3,华南师范大学 计算机学院,10,衡量算法性能的标准,衡量算法性能一般有下面几个标准 正确性 易读性 健壮性 算法的时间和空间性能:高效率和低存

8、储空间 我们这里主要讨论算法的时间和空间性能,并以此作为衡量算法性能的重要标准。而且我们主要侧重于时间方面。,2020/12/3,华南师范大学 计算机学院,11,算法的表达机制,【表达算法的抽象机制】对于一个明确的数学问题,设计它的算法,总是先选用该问题的一个数学模型。 接着,弄清该问题数学模型在已知条件下的初始状态和要求的结果状态,以及这两个状态之间的隐含关系。 然后探索从数据模型的已知初始状态到达要求的结果状态所需的运算步骤。,2020/12/3,华南师范大学 计算机学院,12,算法的描述方法,自然语言; 图表; 框图; 计算机语言或程序设计语言等。 如,汇编、C+、Java。,1.3 二

9、分搜索,假定元素满足:线序集合 1n 中有吗? 从头到尾的扫描,比较次:顺序搜索 顺序搜索适合无序的集合 有序的集合:BinarySearch 要求能够写出:这个简单的算法,并分析运算量。,2020/12/3,华南师范大学 计算机学院,13,2020/12/3,华南师范大学 计算机学院,14,1.3- (例) 线性查找的时间评估,最小查找时间? 最好情况, A1=X 平均查找时间?P(i)=1/n, Tavg(n)=n/2 最大查找时间?最坏情况, x 不在A1.n或x=An, 复杂度为n,2020/12/3,华南师范大学 计算机学院,15,1. 3 二分搜索及其时间复杂度,线性搜索 二分搜索

10、 同数据结构,略。但要求作为例子或问题求解。,及其算法分析,比较次数分析,中,次循环时剩余元素数目Floor(n/2j-1) 循环停止条件:找到,或当前查找范围的数组长度为。 最大搜索次数:满足Floor(n/2j-1)=1 时的值 即:n/2j-1 2 也即: 2j-1n 2j j-1 log n j j=Floor(log n)+1,2020/12/3,华南师范大学 计算机学院,16,2020/12/3,华南师范大学 计算机学院,17,随堂练习,设有序数组:,试搜索x=20, 以及 X =22. 1)拟用什么法?为什么? 2)试给出用你想要得算法求解的过程。,参考:教材binarySear

11、ch Example 1.1,2020/12/3,华南师范大学 计算机学院,18,二分查找的基本运算量分析,?,1.10 最优算法,定义: 排序问题中的 ,2020/12/3,华南师范大学 计算机学院,19,2020/12/3,华南师范大学 计算机学院,20,1.11-14. 算法分析(Algorithm Analysis),算法分析:对于算法的时间和空间复杂度进行定量分析。 分析算法时间复杂度的基本步骤 元运算考察 可以做基本运算的有那些,选基本运算 基本运算的总量评估 借助数学公式,比如循环嵌套就是乘法原理,递归调用对应递归公式等求解,2020/12/3,华南师范大学 计算机学院,21,简

12、例估计算法运行时间,算法时间复杂度的有关概念:,平均 分析、求解算法复杂度的基本方法 设计计算过程如下: (为讨论方便,每行前加一行号) (1) for i:=1 to n (2) for j:=1 to n (3) x:=x+1 . 试问在程序运行中各步执行的次数各为多少? 上例中的赋值操作基本运算 时间复杂性可粗略地表示为f(n)=O(n2)。 要更多地了解关于算法的复杂性,就必须弄清楚如下两个问题:(1)用怎样的一个量来表达一个算法的复杂性;(2)对于给定的一个算法,怎样具体计算它的复杂性。,2020/12/3,华南师范大学 计算机学院,22,分析时间复杂度的基本步骤,一、选取一种元运算

13、作为基本运算 二、表示出在算法运行期间基本运算执行的总频数 三、渐近时间复杂度(asymptotic time complexity),2020/12/3,华南师范大学 计算机学院,23,思考与练习:指出下面程序段中语句标*的频度和该程序段的时间复杂性。,(1)*y:=sin(x); (2) for i:=1 to n-1 do * y:=y+1; for j:=0 to 2*n do *x:=x+1; (3) x:=1;y:=1; for k:=1 to n do * x:=x+1; for i:=1 to n do for j:=1 to n do *y:=y+1; (4) i:=1; w

14、hile (in if Ai=x then retun(i) 可否改造(4)?,2020/12/3,华南师范大学 计算机学院,24,算法复杂性,算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低。 计算机的资源,最重要的是时间和空间(即存储器)资源。 因而,算法的复杂性有时间复杂性和空间复杂性之分。 对于任意给定的问题,设计出复杂性尽可能低的算法是我们在设计算法时追求的一个重要目标; 另一方面,当给定的问题已有多种算法时,选择其中复杂性

15、最低者,是我们在选用算法适应遵循的一个重要准则。 算法的复杂性分析的意义:对算法的设计或选用有着重要的指导意义和实用价值。 对算法的分析,以确定或判断算法的优劣,通常以时间复杂性来衡量,时间复杂性越低,对应的算法就越优。,2020/12/3,华南师范大学 计算机学院,25,算法的复杂性分析 附加5个说明,1. 算法复杂性概述 算法复杂性 = 算法所需要的计算机资源。 算法的时间复杂性T(n);算法的空间复杂性S(n)。 其中n是问题实例(Instance)的规模(输入大小)。,2.算法的时间复杂性 (1)最坏情况下的时间复杂性 Tmax(n) = max T(I) | size(I)=n (2

16、)最好情况下的时间复杂性 Tmin(n) = min T(I) | size(I)=n (3)平均情况下的时间复杂性 Tavg(n) = 其中I是问题的规模为n的实例,p(I)是实 例I出现的概率。,2020/12/3,华南师范大学 计算机学院,26,3.算法渐近复杂性 T(n) , as n; (T(n) - t(n) )/ T(n) 0 ,as n; t(n)是T(n)的渐近性态,为算法的渐近复杂性。 在数学上, t(n)是T(n)的渐近表达式,是T(n)略去低阶项留下的主项。它比T(n) 简单。,4. 渐近复杂性分析的记号 :渐近上界记号( a b ) :渐近下界记号( a b ) :渐

17、近同阶记号(a=b),2020/12/3,华南师范大学 计算机学院,27,5. 渐近运算规则 O(f(n)+O(g(n) = O(maxf(n),g(n) ; O(f(n)+O(g(n) = O(f(n)+g(n) ; O(f(n)*O(g(n) = O(f(n)*g(n) ; O(cf(n) = O(f(n) ; g(n)= O(f(n) O(f(n)+O(g(n) = O(f(n) 。,2020/12/3,华南师范大学 计算机学院,28,1.8.2 渐近表示的记号O,-记号 定义.2 设f(n)和g(n)均是从自然数集到非负实数集上的函数。 如果存在常数c0和一个自然数n0,使得 对于n

18、n0 ,均 f(n) cg(n), 则称 f(n)=O(g(n)。 (充分性)如果 f(n)/g(n) 关于极限存在, 那么就有f(n)=O(g(n)。,2020/12/3,华南师范大学 计算机学院,29,.8.3渐近表示的记号 ,-记号 设f(n)和g(n)均是从自然数集到非负实数集上的函数。如果存在常数c0和一个自然数n0,使得对于任意的n n0 ,均有 f(n) cg(n), 则 f(n)= (g(n)。,2020/12/3,华南师范大学 计算机学院,30,1.8.4 渐近表示的记号 ,-记号 设f(n)和g(n)均是从自然数集到非负实数集上的函数。如果存在一个自然数n0和两个正常数c1

19、,c2,使得对于任意的n n0 ,均有 c1g(n) f(n) c2 g(n), 则 f(n)= (g(n)。,1.8.6 复杂性类与o符号,, 定义.5 无穷小 o 注意,用表示f(n)是g(n)的无穷小关系,教材页复杂性类的层次。,2020/12/3,华南师范大学 计算机学院,31,o 关系,2020/12/3,华南师范大学 计算机学院,32,趋于无穷大时, 的前项是后项的高阶无穷小,2020/12/3,华南师范大学 计算机学院,33,例1 设f(n)=10n2+20n。则有 f(n)=O(n2) f(n)=(n2) f(n)= (n2) 例2 设f(n)=aknk+ak-1nk-1+a1

20、n+ a0 ,(ak0)。则有 f(n)=O(nk) f(n)=(nk): f(n)= (nk) 由此可见,复杂度的渐近表示可以简洁地表示出复杂度的数量级别。,渐近表示 Examples,2020/12/3,华南师范大学 计算机学院,34,1.8-9.算法的时间和空间复杂度,时间复杂度(Time Complexity) 算法运行期间所花费的时间。 通常用渐进形式表示 比如,T(n)= (n2)、 (n2) 或 (n2) 空间复杂度(Space Complexity) 在算法运行期间所需要的内存空间。 一般指,容纳输入数据之外的附加空间(auxiliary space, or work spac

21、e)。 通常用渐进形式表示 比如,S(n)= (n2)、(n2)或 (n2),2020/12/3,华南师范大学 计算机学院,35,1.5-.6. 算法时间复杂度的例子,例1 检索问题的顺序查找算法 以元素的比较作为基本操作。考虑成功检索的情况。 最好情况下的时间复杂度: (1) 最坏情况下的时间复杂度: (n) 在等概率前提下,平均情况下的时间复杂度: (n) 例2 直接插入排序算法 以元素的比较作为基本操作。 最好情况下的时间复杂度: (n) 最坏情况下的时间复杂度: (n2) 在等概率前提下,平均情况下的时间复杂度: (n2),2020/12/3,华南师范大学 计算机学院,36,1. 7

22、(例) 合并两个已排序的表,归并排序 算法基本思想(合并两个有序表为基础,把最初的输入两两排序,逐渐合并为完整的有序表) 简单的以个数的情形做例子9,4,5,2,1,7,4,6由小到大, 考虑的对象按层计数如页图1.4 算法:BOTTOMUPSORT 元素赋值次数为2n p9 P11,分析,算法,2020/12/3,华南师范大学 计算机学院,37,2020/12/3,华南师范大学 计算机学院,38,2020/12/3,华南师范大学 计算机学院,39,基本思想,3个数组 Apq, Aq+1r, Bpr 3个指针:s,t,k s初始化时各自指向Ap t初始化时各自指向Aq+1 k初始化时各自指向B

23、p,暂存器。 比较As,At,小的值存入Bk 小的指针1,形成新比较对,存入k1 某组已到尾部,将另一组尚未比较的复制到B B回写到A,2020/12/3,华南师范大学 计算机学院,40,例子选择排序 1. 5,基本思想 算法:SelectionSort 观察:比较次数:n(n1)/2,赋值次数界于0与3(n1)之间。,2020/12/3,华南师范大学 计算机学院,41,例子插入排序1. 6,基本思想 算法:InsertionSort 比较次数: n(n1)/2 赋值次数:比较次数加n1,2020/12/3,华南师范大学 计算机学院,42,强调例子1. 7自底向上合并排序,图示, 基本思想,P

24、9 BottomUpSort 实例: 性能分析:P11,2020/12/3,华南师范大学 计算机学院,43,1. 8 时间复杂性 阶的增长,衡量: P12,近似时间。 比较,界限 近似时间 ,相对于同一/不同问题的算法,估计时间相对性 独立于机器,独立于不同语言 技术上的进步,不影响算法的时间测度方法成立 基本运算支撑的大规模输入实例。 P13图1.5: 表示运行时间的典型函数的增长情况 P14 表1.1: 不同大小输入的时间量级运行时间比较 元运算:对任何计算步骤,其代价总是一个时间常量为上界,而不管输入数据或执行的算法,总称这样的计算步骤为元运算,(基本操作) 算术运算:, ,/ 比较和逻

25、辑运算 赋值运算,包括遍历表或树的指针赋值,2020/12/3,华南师范大学 计算机学院,44,2020/12/3,华南师范大学 计算机学院,45,1. 8 时间复杂性2 表示,BigO, 定义1.2:f(n),g(n)从自然数集合到非负实数集合的两个函数,如果存在一个自然数n0和c0,使得 n=n0, f(n)= cg(n) 则称f(n)为O(g(n)。 由极限理论, 存在,则 其不发散到无穷,蕴涵 f(n)O(g(n)。 Big Omiga 1.8.3: Big Theta: 1.8.4 举例: 1.8.5,2020/12/3,华南师范大学 计算机学院,46,讨论问题,从定义看,f(n)为

26、O(g(n)和f(n)与g(n)比值的极限存在是否一回事?(即是否等价?) 对于 大Omega? 对于 大Theta?,f(n)为O(g(n),说明f的增长至少和g的某个常数倍一样快。 f(n)为(g(n) iff g(n)为O(f(n),2020/12/3,华南师范大学 计算机学院,47,1.8.4 运行时间是(g(n)阶的,f(n),g(n)从自然数集合到非负实数集合的两个函数,如果存在一个自然数n0和两个正常数c1,c20,使得 n=n0, c1g(n)= f(n)= c2g(n) 则称f(n)为(g(n)。 由极限理论, 存在,则 其不发散到无穷,蕴涵 f(n) (g(n) 。 SEL

27、ECTIONSORT, (n2) BOTTOMUPSORT, (n log n),2020/12/3,华南师范大学 计算机学院,48,讨论:,P17 Top Paragraph,预习,归纳法 贪婪法 动态规划法 分治法的定义 复习:求和公式(,.,),递归方程求解,2020/12/3,华南师范大学 计算机学院,49,2020/12/3,华南师范大学 计算机学院,50,1. 9 空间复杂性,S(n) space 。T(n) time complexity 在上述意义下: S(n) 可以对应T(n)求法 例1.171.21 Page:20 时间与空间的依存:权衡。 时间,空间的反比关系。矛盾,兑换

28、 一增一减存在限度。,2020/12/3,华南师范大学 计算机学院,51,1. 10 最优算法,阅读,品一品两段 排序算法中最优的是? 最优算法的定义是?,2020/12/3,华南师范大学 计算机学院,52,1. 11 如何估计算法运行时间,P21 运行时间常常和循环及类似结构的执行次数成正比。 比如:搜索,排序,矩阵 例.22 Count1 例.23 Count2 例.24 Count3 例.25 PSUM P23 计算基本运算的频度:选个频度最高或常数倍的元运算作为评估时间的基本运算 P26 使用递推关系,如T(n)=2T(n/2)+n,2020/12/3,华南师范大学 计算机学院,53,

29、1. 12 最坏情况和平均情况的分析,Theta 不是总可以达到例1.29 平均情况,必须知道输入出现的概率复杂冗长 例1.30, 1.31,2020/12/3,华南师范大学 计算机学院,54,1. 13 平摊分析,情形:算法中有一种运算反复执行时,其运行时间不停变动。 该运算大多数时候运行快,少数情况下费时, 同时假定求确界可能,但困难, 引入平摊分析 平摊分析中,算出算法在整个执行中所需时间的平均值。称该运算的平摊运行时间。,例1.32,2020/12/3,华南师范大学 计算机学院,55,注意到页的第段的分析 段的分析,2020/12/3,华南师范大学 计算机学院,56,1.14 输人大小

30、和问题实例,算法性能的测度通常是它输入的大小、顺序、分布等的函数。 常用输入大小的测度:,个情形 排序,搜索问题:数组或表中元素的数目 图的算法中:图中的边或顶点数目,或二者一起 矩阵中:输入矩阵的维数 计算几何中 数论和密码学中,2020/12/3,华南师范大学 计算机学院,57,算法分析的数学准备,1. 单调函数 单调递增: m n f(m) f(n) ; 单调递减: m n f(m) f(n); 严格单调递增: m f(n).,2. 取整函数 x :不大于x的最大整数; x :不小于x的最小整数。,2020/12/3,华南师范大学 计算机学院,58,取整函数的若干性质:,x-1 0,有: n/a /b = n/ab ; n/a /b = n/ab ; a/b (a+(b-1)/b; a/b (a-(b-1)/b; f(x)= x , g(x)= x 为单调递增函数。,2020/12/3,华南师范大学 计算机学院,59,3.多项式函数,p(n)= a0+a1n+a2n2+adnd; ad0; p(n) = (nd); f(n) = O(nk) f(n)多项式有界; f(n) = O(1) f(n) c; k d p(n) = O(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论