算法分析与设计多媒体课件-.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《算法分析与设计多媒体课件-.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计 多媒体 课件
- 资源描述:
-
1、2022-11-14-0算法设计与分析算法设计与分析Algorithm Design and Analysis湖南商学院计算机与电子工程学院2009.52022-11-141-目录qChapter1 Chapter1 绪论绪论qChapter2 Chapter2 算法效率分析基础算法效率分析基础 qChapter3 Chapter3 分治法分治法 qChapter4 Chapter4 减治法减治法qChapter5 Chapter5 变治法变治法qChapter6 Chapter6 时空权衡时空权衡qChapter7 Chapter7 动态规划动态规划qChapter8 Chapter8 贪心
2、法贪心法qChapter9 Chapter9 回溯与分枝限界回溯与分枝限界附:算法设计与分析实例动画集成2022-11-14-2 Chapter1 绪论 Introduction2022-11-143-绪论q什么是算法q算法的实例q算法研究的基本问题q为什么要学习算法q已有的基础数据结构返回总目录2022-11-144-什么是算法 算法是为了解决某一问题而设计的无疑义的指令序列,对于合法的输入,能在有限的时间内得出所需要的输出。problemalgorithmcomputerinputoutput2022-11-145-算法满足下列性质n输 入:有零个或多个外部量作为算法的输入。n输 出:算法
3、产生至少一个量作为输出。n确定性:组成算法的每条指令清晰、无歧义。n有限性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。2022-11-146-算法的实例q排序q查找q最短路径q最小生成树q旅行商问题q背包问题q皇后问题q汉诺塔2022-11-147-算法研究的基本问题q如何设计算法q如何描述算法q证明算法的正确性q常用数学归纳法q算法效率q理论分析q实证分析q算法优化2022-11-148-为什么要学习算法q理论学习上的重要性q计科专业的核心课程q计科专业的基础课程q实践上的重要性2022-11-149-已有的基础数据结构q典型的问题类型q排序q查找q字符串处理q图q组合问题q几
4、何问题q数值问题2022-11-1410-已有的基础数据结构q数据结构基础q表n数组n链表n字符串q栈和队列q图q树q集合和字典2022-11-1411-思考q带锁的门走廊上n个带锁的门,从1到n一次编号,最初都关着,我们从门前经过n次,每次都从1号门开始,在第i次经过时,我们改变i的倍数的门所状态,这样,最后一次经过时,那些门开着,那些门关着?q有四个人过桥,他们都在桥的一端,17分钟让他们全部通过,必须携带手电筒,必须步行携带,每个人速度不同,甲过桥一分钟,乙过桥2分钟,丙过桥5分钟,丁要10分钟,2个人一起走需要的时间是较慢的人的时间,他们要如何走才能顺利完成?2022-11-1412-
5、本章结束,返回总目录2022-11-14-13 Chapter2 算法效率分析基础 Foundation of Algorithm Analysis2022-11-1414-算法效率分析基础q研究的主要问题q方法q时间效率的理论分析q时间效率的实证分析q最好、最坏与平均情况q增长速度q非递归与递归分析过程返回总目录2022-11-1415-研究的主要问题q算法的正确性q时间效率q空间效率q最优性2022-11-1416-方法q理论分析q实证分析2022-11-1417-2.1时间效率的理论分析q输入规模q 基本运算 为什么要用基本运算?如何找基本运算?运行时间基本运算的执行时间基本运算的执行次
6、数输入规模 T(n)copC(n)2022-11-1418-输入规模与基本操作举例基本运算输入规模的度量问题对节点或对边的访问节点数或者边数典型的图问题除法n的大小(经常转化为二进制表示,即为二进制的位数)对于给定的数n,判断是否为素数两个数相乘矩阵的维度或者元素的个数两个矩阵相乘关键字比较列表节点数目,例如 n在长度为n的列表中按关键字查找2022-11-1419-对时间效率的实证分析q选择特别的或者典型的输入q统计q实际运行时间(e.g.,milliseconds)q统计基本操作执行的次数q对统计数据进行分析2022-11-1420-最好、最坏、平均情况q很多算法的效率都取决于输入的组织q
7、最坏情况:Cworst(n)对于规模为n的输入,最大的消耗q最好情况:Cbest(n)对于规模为n的输入,最小的消耗q平均情况:Cavg(n)对于规模为n的输入,“平均”的消耗q基本操作执行的次数体现在典型输入中q不是最好最坏情况的平均q将规模n的实例划分为几种类型,同种实例所需要的基本操作执行次数一样,然后我们得到或者假设各种输入的概率分布,以推导出我们的平均次数2022-11-1421-例:顺序查找q最坏情况:nq最好情况:1q平均情况:(1+n)p/2+n(1-p)/在一个指定的数组中顺序查找指定元素/输入:A0.n-1,k/输出:指定查找元素在数组中的下标,没有返回-12022-11-
8、1422-思考q对于下面每种算法,1.指出输入规模的合理度量,2.它的基本操作,对相同规模的输入来说,3.基本操作的执行次数是否有所不同?a、计算n个数的和 b、计算n!c、找出包含n个数字的列表的最大元素 c、两个十进制正整数相乘的笔算算法 d、欧几里得法求公约数2022-11-1423-q选择手套一个抽屉里有22只手套,5双红色的,4双黄色的,2双绿色的,黑暗中挑选,最优情况下就最少选几只能找到一对匹配的手套?最坏情况下呢?q丢失的袜子 假设洗了5双不同的袜子后,发现两只找不到了,当然希望留下数量最多的完整的袜子,在最好的情况下,你会留下4双袜子,最坏情况下只有3双,假设10只袜子每只丢失
9、的概率相同,请找出最好与最坏的发生概率,平均情况下能指望有几双?2022-11-1424-增长次数 q最重要的:考虑n时,效率的乘积增长速度q例如:q当计算机的速度增加两倍时,算法运行的速度会有多快q当在两倍的输入规模下解决某问题时,时间会增加多少 T(n)copC(n)2022-11-1425-n时的重要增长值比较一下logn与n2的区别2022-11-1426-分析框架概要q算法的效率用输入规模函数进行度量q基本操作的执行次数q输入规模相同情况下,有时候需要区分最好、最差和平均效率q算法输入规模趋向无穷大时,它的运行时间函数的增长次数2022-11-1427-2.2增长率渐进表示q我们关心
10、的是算法的基本操作次数的增长次数,并把它作为算法效率分析的主要指标,为了进行比较归类,引入下列3个符号:qO(g(n):增长不会超过g(n)的一类函数f(n)q(g(n):增长率与g(n)相同的一类函数f(n)q(g(n):增长至少与g(n)相同的一类函数f(n)2022-11-1428-Big-oh成立的条件是对于足够大的nn0,存在大于0的常数c,使得以上图形满足,后面符号的两个条件相同P41例2022-11-1429-Big-omega2022-11-1430-Big-theta2022-11-1431-)()1(212nnn证明2022-11-1432-渐进增长的相关属性qf(n)O(
11、f(n)qf(n)O(g(n)if g(n)(f(n)qIf f(n)O(g(n)and g(n)O(h(n),then f(n)O(h(n)qIf f1(n)O(g1(n)and f2(n)O(g2(n),then f1(n)+f2(n)O(maxg1(n),g2(n)2022-11-1433-使用极限比较增长次数qlim T(n)/g(n)=0 order of growth of T(n)0 order of growth of T(n)=order of growth of g(n)order of growth of T(n)order of growth of g(n)Exampl
12、es:10n vs.n2 n(n+1)/2 vs.n2 n2022-11-1434-基本的渐进效率分类:1常数log n对数n线性n log nn-log-nn2平方n3立方2n指数n!阶乘2022-11-1435-qP46 1选择合适的符号来指出顺序查找算法时间效率类型q最优q最差q平均情况q作业 2、52022-11-1436-2.3非递归算法时间效率分析过程q使用变量n来描述输入规模q定义算法的基本操作q在输入规模为n的情况下,区分最坏、平均和最好情况q对基本操作执行的次数求和q使用相关公式和规则对和进行化简2022-11-1437-示例1:求最大元素2022-11-1438-示例2:元
13、素的唯一性问题2022-11-1439-示例3:矩阵的乘法2022-11-1440-示例4.十进制数转化成二进制数后的位数 2022-11-1441-q练习 p51 1 e、g 其余作业2022-11-1442-2.4递归算法的时间效率分析过程q递归算法:q函数调用自身的情况称为递归。q递归的条件:q子问题与原问题是同样的问题,且更为简单q不能无限制调用,必须有出口条件2022-11-1443-q确定一个变量来描述输入规模q确定算法的基本操作q对于相同规模的不同输入,在执行时是否有不同的基本操作次数,如果有,那么最坏、平均和最好情况应该分别考虑q建立与适当初始条件的递归联系,表示基本操作的执行
14、次数q使用反向迭代方法和初始条件解出递归式,至少要建立递归解的增长率2022-11-1444-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问题规模?基本操作?运算时间的递推式?初始条件?2022-11-1445-q实例2:汉诺塔问题q实例3:十进制正整数在二进制表示中的数字个数 递归方法 q练习p58页(1)a b、c、d、e做作业qP64页 习题2.5 (4)2022-11-1446-本章结束,返回总目录2022-11-14-47Chapter3 分治法 Divid and Conquer
15、2022-11-1448-分治法q分治法q通用分治递推式q分治法实例返回总目录2022-11-1449-分治法q通用算法设计技术q将问题的实例划分为同一个问题的几个较小实例q对这些较小的实例求解q合并这些较小问题的解,已得到原始问题的解q分治算法很适合用递归来解决2022-11-1450-分治法子问题子问题2的规模是的规模是n/2子问题子问题1的规模是的规模是n/2子问题子问题1的解的解原始问题的解原始问题的解子问题子问题2的解的解原始问题规模是原始问题规模是n2022-11-1451-通用分治递推式T(n)=aT(n/b)+f(n)其中,f(n)(nd),d 0主定理:当 a bd,T(n)
16、(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)?2022-11-1452-分治法实例q归并排序和快速排序q二叉树遍历q二分查找q大整数乘法qStrassen矩阵乘法q凸包问题2022-11-1453-归并排序q将数组A0.n-1 分成两个相等数组,并分别用数组B和数组C备份q分别对B,C进行排序q按照如下方法合并B,C到数组A:q重复如下步骤,直到数组中没有元素为止:n比较两个待合并数组的第一个元素n将较小的元素添加到一个新创建的数组中,被复制数组
17、中下标后移。q在未处理完的数组中,剩下的元素被复制到新创建数组的尾部。2022-11-1454-8 3 2 9 7 1 5 48 3 2 97 1 5 48 32 97 15 4832971543 82 91 74 52 3 8 91 4 5 71 2 3 4 5 7 8 92022-11-1455-两个列表归并成一个有序列表的算法2022-11-1456-归并排序算法2022-11-1457-归并排序效率分析q所有实例都有同一个效率:(n log n)q最坏情况下的键值比较次数十分接近于任何基于比较的排序算法在理论上所能达到的最少次数.当n=2k时 c(n)=nlog2n-n+1q空间需求:
18、(n)q可以不用递归(自底而上)2022-11-1458-快速排序q选择一个中轴 元素,我们这里选择第一个元素q对数组进行排序,使得小于或等于中轴的元素位于子数组的第一部分,剩下的元素都大于或等于中轴元素的值。q将中轴子与第一个子数组中的元素进行交换-此时,中轴在最后的位置q对两个子数组进行递归排序2022-11-1459-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 7ijl=0,r=7 5i
19、jijijijjiS=4 2 3 1 4 ijl=0,r=3 2 3 1 4 ij 2 1 3 4 ij 2 1 3 4 ij 1 2 3 4 S=1 1 l=5,r=7 3 4 i j 3 4 ij 4 l=0,r=0l=2,r=3S=2l=2,r=1l=3,r=3 8 9 7ij 8 7 9ij 8 7 9ij 7 8 9l=5,r=5 7 9 l=7,r=7S=6快速排序操作的一个例子。(a)数组的变化,其中中轴用粗体表示;(b)快速排序的递归调用树,调用的输入值是子数组的边界l和r,以及分区的分裂点位置s(a)(b)2022-11-1460-快排效率分析q最好情况:从中间拆分(n lo
20、g n)q最坏情况:已经是排好序的数组 (n2)q平均情况:无序数组(n log n)q对该算法的改进:q更好的选择中轴:三平均分区法 q当子数组足够小时改用更简单的排序方法q递归消去法n可将该算法的运行时间削减20%-25%q考虑用该种方法来对大文件(n10000)来进行内部排序2022-11-1461-二分查找对于有序数组的查找的一种高速算法 K vsA0 .Am .An-1q如果 K=Am,停止查找;q否则当K Am 时,在 Am+1.n-1中查找。2022-11-1462-二分查找效率分析q时间效率q最坏情况下递推式:Cw(n)=1+Cw(n/2),Cw(1)=1 q经过调整后:Cw(
21、n)=log2(n+1)这是非常快的,例如:Cw(106)=20q最适合用于查找已排序数组q限制:必须是一个排序数组(不是链接数组)q折半查找并不是分治法典型的特例2022-11-1463-二叉树遍历二叉树时分治法的较好的结构例1:遍历(前序,中序,后序)Algorithm Inorder(T)if T Inorder(Tleft)print(root of T)Inorder(Tright)效率:(n)2022-11-1464-二叉树遍历例 2:计算二叉树的高度 TTLR 2022-11-1465-大整数乘法两位整数相乘可以用数组表示如:a1 a2 anb1 b2 bnA=123456789
22、01357986429B=87654321284820912836(d10)d11d12 d1n(d20)d21d22 d2n(dn0)dn1dn2 dnn效率:O(n2)2022-11-1466-大整数乘法两位数两位数A=2135 和和B=4014可以这样表示:可以这样表示:将每个数字从中间一分为二将每个数字从中间一分为二它们的积可以用这个公式计算:它们的积可以用这个公式计算:A B=A1 B110n +(A1 B2+A2 B1)10n/2+A2 B2 A=(21102+35),B=(40 102+14)A B=(21 102+35)(40 102+14)=21 40 104 +(21 14
23、+35 40)102+35 14效率效率:M(n)=4M(n/2),M(1)=1 M(n)=n2 2022-11-1467-大整数乘法(A1 B2+A2 B1)=(A1+A2)(B1+B2)-A1 B1-A2 B2A 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)=3M(2 k-1)=.=3k 因为:k=log2n M(n)=nlog23=n1.5852022-1
24、1-1468-大整数乘法 A=21 35 B=40 14 A1A2B1B2A B=21*35+(21*14+35*40)+35*14(21*14+35*40)=(21+35)*(40+24)-21*35-35*14例如:计算计算 2135 4014 2022-11-1469-A和B的乘积矩阵C中的元素Ci,j定义为:nkjkBkiAjiC1若依此定义来计算A和B的乘积矩阵C,则每计算C的一个元素Cij,需要做n次乘法和n-1次加法。因此,算出矩阵C的 个元素所需的计算时间为O(n3)u传统方法:O(n3)2022-11-1470-使用与上例类似的技术,将矩阵A,B和C中每一矩阵都分块成4个大小
25、相等的子矩阵。由此可将方程C=AB重写为:u传统方法:O(n3)u分治法:222112112221121122211211BBBBAAAACCCC由此可得:2112111111BABAC2212121112BABAC2122112121BABAC2222122122BABAC由此可见,单纯采用分治法,没有改进2022-11-1471-为了降低时间复杂度,必须减少乘法的次数。222112112221121122211211BBBBAAAACCCC)(2212111BBAM2212112)(BAAM1122213)(BAAM)(1121224BBAM)(221122115BBAAM)(222122
展开阅读全文