算法分析与设计多媒体课件.ppt
《算法分析与设计多媒体课件.ppt》由会员分享,可在线阅读,更多相关《算法分析与设计多媒体课件.ppt(543页珍藏版)》请在课桌文档上搜索。
1、Algorithm Design and Analysis,2023/3/30,1,目录,Chapter1 绪论Chapter2 算法效率分析基础 Chapter3 分治法 Chapter4 减治法Chapter5 变治法,Chapter6 时空权衡Chapter7 动态规划Chapter8 贪心法Chapter9 回溯与分枝限界,附:实例动画集成,Chapter1 绪论 Introduction,2023/3/30,3,绪论,什么是算法算法的实例算法研究的基本问题为什么要学习算法已有的基础数据结构,返回总目录,2023/3/30,4,什么是算法,算法是为了解决某一问题而设计的无疑义的指令序列
2、,对于合法的输入,能在有限的时间内得出所需要的输出。,problem,algorithm,computer,input,output,2023/3/30,5,算法满足下列性质,输 入:有零个或多个外部量作为算法的输入。输 出:算法产生至少一个量作为输出。确定性:组成算法的每条指令清晰、无歧义。有限性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。,2023/3/30,6,算法的实例,排序查找最短路径最小生成树旅行商问题背包问题皇后问题汉诺塔,2023/3/30,7,算法研究的基本问题,如何设计算法如何描述算法证明算法的正确性常用数学归纳法算法效率理论分析实证分析算法优化,2023/3
3、/30,8,为什么要学习算法,理论学习上的重要性计科专业的核心课程计科专业的基础课程实践上的重要性,2023/3/30,9,已有的基础数据结构,典型的问题类型排序查找字符串处理图组合问题几何问题数值问题,2023/3/30,10,已有的基础数据结构,数据结构基础表数组链表字符串栈和队列图树集合和字典,2023/3/30,11,思考,带锁的门走廊上n个带锁的门,从1到n一次编号,最初都关着,我们从门前经过n次,每次都从1号门开始,在第i次经过时,我们改变i的倍数的门所状态,这样,最后一次经过时,那些门开着,那些门关着?有四个人过桥,他们都在桥的一端,17分钟让他们全部通过,必须携带手电筒,必须步
4、行携带,每个人速度不同,甲过桥一分钟,乙过桥2分钟,丙过桥5分钟,丁要10分钟,2个人一起走需要的时间是较慢的人的时间,他们要如何走才能顺利完成?,2023/3/30,12,本章结束,返回总目录,Chapter2 算法效率分析基础 Foundation of Algorithm Analysis,2023/3/30,14,算法效率分析基础,研究的主要问题方法时间效率的理论分析时间效率的实证分析最好、最坏与平均情况增长速度非递归与递归分析过程,返回总目录,2023/3/30,15,研究的主要问题,算法的正确性时间效率空间效率最优性,2023/3/30,16,方法,理论分析实证分析,2023/3/
5、30,17,2.1时间效率的理论分析,输入规模 基本运算 为什么要用基本运算?如何找基本运算?,运行时间,基本运算的执行时间,基本运算的执行次数,输入规模,T(n)copC(n),2023/3/30,18,输入规模与基本操作举例,基本运算,输入规模的度量,问题,对节点或对边的访问,节点数或者边数,典型的图问题,除法,n的大小(经常转化为二进制表示,即为二进制的位数),对于给定的数n,判断是否为素数,两个数相乘,矩阵的维度或者元素的个数,两个矩阵相乘,关键字比较,列表节点数目,例如 n,在长度为n的列表中按关键字查找,2023/3/30,19,对时间效率的实证分析,选择特别的或者典型的输入统计实
6、际运行时间(e.g.,milliseconds)统计基本操作执行的次数对统计数据进行分析,2023/3/30,20,最好、最坏、平均情况,很多算法的效率都取决于输入的组织最坏情况:Cworst(n)对于规模为n的输入,最大的消耗最好情况:Cbest(n)对于规模为n的输入,最小的消耗平均情况:Cavg(n)对于规模为n的输入,“平均”的消耗基本操作执行的次数体现在典型输入中不是最好最坏情况的平均将规模n的实例划分为几种类型,同种实例所需要的基本操作执行次数一样,然后我们得到或者假设各种输入的概率分布,以推导出我们的平均次数,2023/3/30,21,例:顺序查找,最坏情况:n最好情况:1平均情
7、况:(1+n)p/2+n(1-p),/在一个指定的数组中顺序查找指定元素/输入:A0.n-1,k/输出:指定查找元素在数组中的下标,没有返回-1,2023/3/30,22,思考,对于下面每种算法,1.指出输入规模的合理度量,2.它的基本操作,对相同规模的输入来说,3.基本操作的执行次数是否有所不同?a、计算n个数的和 b、计算n!c、找出包含n个数字的列表的最大元素 c、两个十进制正整数相乘的笔算算法 d、欧几里得法求公约数,2023/3/30,23,选择手套一个抽屉里有22只手套,5双红色的,4双黄色的,2双绿色的,黑暗中挑选,最优情况下就最少选几只能找到一对匹配的手套?最坏情况下呢?丢失的
8、袜子 假设洗了5双不同的袜子后,发现两只找不到了,当然希望留下数量最多的完整的袜子,在最好的情况下,你会留下4双袜子,最坏情况下只有3双,假设10只袜子每只丢失的概率相同,请找出最好与最坏的发生概率,平均情况下能指望有几双?,2023/3/30,24,增长次数,最重要的:考虑n时,效率的乘积增长速度例如:当计算机的速度增加两倍时,算法运行的速度会有多快当在两倍的输入规模下解决某问题时,时间会增加多少,T(n)copC(n),2023/3/30,25,n时的重要增长值,比较一下logn与n2的区别,2023/3/30,26,分析框架概要,算法的效率用输入规模函数进行度量基本操作的执行次数输入规模
9、相同情况下,有时候需要区分最好、最差和平均效率算法输入规模趋向无穷大时,它的运行时间函数的增长次数,2023/3/30,27,2.2增长率渐进表示,我们关心的是算法的基本操作次数的增长次数,并把它作为算法效率分析的主要指标,为了进行比较归类,引入下列3个符号:O(g(n):增长不会超过g(n)的一类函数f(n)(g(n):增长率与g(n)相同的一类函数f(n)(g(n):增长至少与g(n)相同的一类函数f(n),2023/3/30,28,Big-oh,成立的条件是对于足够大的nn0,存在大于0的常数c,使得以上图形满足,后面符号的两个条件相同,P41例,2023/3/30,29,Big-ome
10、ga,2023/3/30,30,Big-theta,2023/3/30,31,证明,2023/3/30,32,渐进增长的相关属性,f(n)O(f(n)f(n)O(g(n)if g(n)(f(n)If f(n)O(g(n)and g(n)O(h(n),then f(n)O(h(n)If f1(n)O(g1(n)and f2(n)O(g2(n),then f1(n)+f2(n)O(maxg1(n),g2(n),2023/3/30,33,使用极限比较增长次数,lim T(n)/g(n)=,0 order of growth of T(n)order of growth of g(n),c 0 ord
11、er of growth of T(n)=order of growth of g(n),order of growth of T(n)order of growth of g(n),Examples:10n vs.n2 n(n+1)/2 vs.n2,n,2023/3/30,34,基本的渐进效率分类:,2023/3/30,35,P46 1选择合适的符号来指出顺序查找算法时间效率类型最优最差平均情况作业 2、5,2023/3/30,36,2.3非递归算法时间效率分析过程,使用变量n来描述输入规模定义算法的基本操作在输入规模为n的情况下,区分最坏、平均和最好情况对基本操作执行的次数求和使用相关公式
12、和规则对和进行化简,2023/3/30,37,示例1:求最大元素,2023/3/30,38,示例2:元素的唯一性问题,2023/3/30,39,示例3:矩阵的乘法,2023/3/30,40,示例4.十进制数转化成二进制数后的位数,2023/3/30,41,练习 p51 1 e、g 其余作业,2023/3/30,42,2.4递归算法的时间效率分析过程,递归算法:函数调用自身的情况称为递归。递归的条件:子问题与原问题是同样的问题,且更为简单不能无限制调用,必须有出口条件,2023/3/30,43,确定一个变量来描述输入规模确定算法的基本操作对于相同规模的不同输入,在执行时是否有不同的基本操作次数,
13、如果有,那么最坏、平均和最好情况应该分别考虑建立与适当初始条件的递归联系,表示基本操作的执行次数使用反向迭代方法和初始条件解出递归式,至少要建立递归解的增长率,2023/3/30,44,N!,定义:n!=1 2(n-1)n for n 1 and 0!=1递归的定义 n!:F(n)=F(n-1)n for n1 and F(0)=1问题规模?基本操作?运算时间的递推式?初始条件?,2023/3/30,45,实例2:汉诺塔问题实例3:十进制正整数在二进制表示中的数字个数 递归方法 练习p58页(1)a b、c、d、e做作业P64页 习题2.5(4),2023/3/30,46,本章结束,返回总目录
14、,Chapter3 分治法 Divid and Conquer,2023/3/30,48,分治法,分治法通用分治递推式分治法实例,返回总目录,2023/3/30,49,分治法,通用算法设计技术将问题的实例划分为同一个问题的几个较小实例对这些较小的实例求解合并这些较小问题的解,已得到原始问题的解分治算法很适合用递归来解决,2023/3/30,50,分治法,子问题2的规模是n/2,子问题1的规模是n/2,子问题1的解,原始问题的解,子问题2的解,原始问题规模是n,2023/3/30,51,通用分治递推式,T(n)=aT(n/b)+f(n)其中,f(n)(nd),d 0主定理:当 a bd,T(n)
15、(nlog b a)注意:对 O 和符号来说类似的结论也是成立的。例如:T(n)=4T(n/2)+n T(n)?T(n)=4T(n/2)+n2 T(n)?T(n)=4T(n/2)+n3 T(n)?,2023/3/30,52,分治法实例,归并排序和快速排序二叉树遍历二分查找大整数乘法Strassen矩阵乘法凸包问题,2023/3/30,53,归并排序,将数组A0.n-1 分成两个相等数组,并分别用数组B和数组C备份分别对B,C进行排序按照如下方法合并B,C到数组A:重复如下步骤,直到数组中没有元素为止:比较两个待合并数组的第一个元素将较小的元素添加到一个新创建的数组中,被复制数组中下标后移。在未
16、处理完的数组中,剩下的元素被复制到新创建数组的尾部。,2023/3/30,54,8 3 2 9 7 1 5 4,8 3 2 9,7 1 5 4,8 3,2 9,7 1,5 4,8,3,2,9,7,1,5,4,3 8,2 9,1 7,4 5,2 3 8 9,1 4 5 7,1 2 3 4 5 7 8 9,2023/3/30,55,两个列表归并成一个有序列表的算法,2023/3/30,56,归并排序算法,2023/3/30,57,归并排序效率分析,所有实例都有同一个效率:(n log n)最坏情况下的键值比较次数十分接近于任何基于比较的排序算法在理论上所能达到的最少次数.当n=2k时 c(n)=n
17、log2n-n+1空间需求:(n)可以不用递归(自底而上),2023/3/30,58,快速排序,选择一个中轴 元素,我们这里选择第一个元素对数组进行排序,使得小于或等于中轴的元素位于子数组的第一部分,剩下的元素都大于或等于中轴元素的值。将中轴子与第一个子数组中的元素进行交换-此时,中轴在最后的位置对两个子数组进行递归排序,2023/3/30,59,0 1 2 3 4 5 6 7,5 3 1 4 8 2 9 7,5 3 1 9 8 2 4 7,3 1 9 8 2 4 7,5 3 1 4 8 2 9 7,5 3 1 4 2 8 9 7,5 3 1 4 2 8 9 7,2 3 1 4 5 8 9 7
18、,i,j,l=0,r=7,5,i,j,i,j,i,j,i,j,j,i,S=4,2 3 1 4,i,j,l=0,r=3,2 3 1 4,i,j,2 1 3 4,i,j,2 1 3 4,i,j,1 2 3 4,S=1,1,l=5,r=7,3 4,i,j,3 4,i,j,4,l=0,r=0,l=2,r=3,S=2,l=2,r=1,l=3,r=3,8 9 7,i,j,8 7 9,i,j,8 7 9,i,j,7 8 9,l=5,r=5,7,9,l=7,r=7,S=6,快速排序操作的一个例子。(a)数组的变化,其中中轴用粗体表示;(b)快速排序的递归调用树,调用的输入值是子数组的边界l和r,以及分区的分裂
19、点位置s,(a),(b),2023/3/30,60,快排效率分析,最好情况:从中间拆分(n log n)最坏情况:已经是排好序的数组(n2)平均情况:无序数组(n log n)对该算法的改进:更好的选择中轴:三平均分区法 当子数组足够小时改用更简单的排序方法递归消去法可将该算法的运行时间削减20%-25%考虑用该种方法来对大文件(n10000)来进行内部排序,2023/3/30,61,二分查找,对于有序数组的查找的一种高速算法 K vsA0.Am.An-1如果 K=Am,停止查找;否则当K Am 时,在 Am+1.n-1中查找。,2023/3/30,62,二分查找效率分析,时间效率最坏情况下递
20、推式:Cw(n)=1+Cw(n/2),Cw(1)=1 经过调整后:Cw(n)=log2(n+1)这是非常快的,例如:Cw(106)=20最适合用于查找已排序数组限制:必须是一个排序数组(不是链接数组)折半查找并不是分治法典型的特例,2023/3/30,63,二叉树遍历,二叉树时分治法的较好的结构例1:遍历(前序,中序,后序)Algorithm Inorder(T)if T Inorder(Tleft)print(root of T)Inorder(Tright)效率:(n),2023/3/30,64,二叉树遍历,例 2:计算二叉树的高度,h(T)=maxh(TL),h(TR)+1 if T 并
21、且 h()=-1效率:(n),2023/3/30,65,大整数乘法,两位整数相乘可以用数组表示如:,a1 a2 anb1 b2 bn,A=12345678901357986429,B=87654321284820912836,(d10)d11d12 d1n,(d20)d21d22 d2n,(dn0)dn1dn2 dnn,效率:O(n2),2023/3/30,66,大整数乘法,两位数A=2135 和B=4014可以这样表示:将每个数字从中间一分为二,它们的积可以用这个公式计算:,A B=A1 B110n+(A1 B2+A2 B1)10n/2+A2 B2,A=(21102+35),B=(40 10
22、2+14),A B=(21 102+35)(40 102+14)=21 40 104+(21 14+35 40)102+35 14,效率:M(n)=4M(n/2),M(1)=1 M(n)=n2,2023/3/30,67,大整数乘法,(A1 B2+A2 B1)=(A1+A2)(B1+B2)-A1 B1-A2 B2,A B=A1 B110n+(A1 B2+A2 B1)10n/2+A2 B2,可以这样做减少乘法:,A B=A1 B1+(A1 B2+A2 B1)+A2 B2,因为上述中只有三个乘法所以乘法次数M(n)的递推式是:,当n1时 M(n)=3M(n/2),M(1)=1,当n=2k时 M(2k
23、)=3M(2 k-1)=.=3k,因为:k=log2n M(n)=nlog23=n1.585,2023/3/30,68,大整数乘法,A=21 35 B=40 14,A1,A2,B1,B2,A B=21*35+(21*14+35*40)+35*14,(21*14+35*40)=(21+35)*(40+24)-21*35-35*14,例如:计算 2135 4014,2023/3/30,69,Strassen矩阵乘法,A和B的乘积矩阵C中的元素Ci,j定义为:,若依此定义来计算A和B的乘积矩阵C,则每计算C的一个元素Cij,需要做n次乘法和n-1次加法。因此,算出矩阵C的 个元素所需的计算时间为O(
24、n3),传统方法:O(n3),2023/3/30,70,Strassen矩阵乘法,使用与上例类似的技术,将矩阵A,B和C中每一矩阵都分块成4个大小相等的子矩阵。由此可将方程C=AB重写为:,传统方法:O(n3)分治法:,由此可得:,由此可见,单纯采用分治法,没有改进,2023/3/30,71,Strassen矩阵乘法,为了降低时间复杂度,必须减少乘法的次数。,2023/3/30,72,复杂度分析T(n)=O(nlog7)=O(n2.81)较大的改进,2023/3/30,73,Strassen矩阵乘法,传统方法:O(n3)分治法:O(n2.81)更快的方法?,Hopcroft和Kerr已经证明(
25、1971),计算2个矩阵的乘积,7次乘法是必要的。因此,要想进一步改进矩阵乘法的时间复杂性,就不能再基于计算22矩阵的7次乘法这样的方法了。或许应当研究或矩阵的更好算法。在Strassen之后又有许多算法改进了矩阵乘法的计算时间复杂性。目前最好的计算时间上界是 O(n2.376)是否能找到O(n2)的算法?目前为止还没有结果。,2023/3/30,74,凸包问题(相关定义p84),什么是凸集合?对于平面的一个点集合(有限或无限),如果以集合中任意两点p和q为端点的线段都属于该集合,则称集合为凸的。定义:凸包:一个点集合s的凸包是包含s的最小凸集合。定理任意包含n2个点(不共线的点)的集合s的凸
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计 多媒体 课件

链接地址:https://www.desk33.com/p-259794.html