算法分析设计期末复习课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《算法分析设计期末复习课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计 期末 复习 课件
- 资源描述:
-
1、算法分析的基本原则1.正确性n定义:在给定有效输入后,算法经过有限时间的计算并产生正确的答案,就称算法是正确的。2.工作量时间复杂性分析n计量工作量的标准:对于给定问题,该算法所执行的基本运算的次数。n基本运算的选择:根据问题选择适当的基本运算。3.占用空间空间复杂性分析n两种占用:n存储程序和输入数据的空间n存储中间结果或操作单元所占用空间额外空间算法复杂性算法复杂性算法复杂性时间时间复杂性复杂性考虑时间资源空间空间复杂性复杂性考虑存储器资源需要时间资源的量需要空间资源的量算法运行时所需要的计算机资源的量时间复杂性函数的具体化?一个算法的时间复杂度(一个算法的时间复杂度(time compl
2、exity)是指算法运行所)是指算法运行所需的时间。需的时间。对于给定的对于给定的N、I和和A,如何导出,如何导出T=T(N,I)和和S=S(N,I)?T(N,I)表示算法在一台抽象的计算机上运行需要的时间。)表示算法在一台抽象的计算机上运行需要的时间。设此抽象计算机的元运算有设此抽象计算机的元运算有k种,分别记为种,分别记为O1,O2,,OK。每。每执行一次这些运算所需要的时间分别为执行一次这些运算所需要的时间分别为t1,t2,.,tk.设算法用到元设算法用到元运算运算Oi的次数为的次数为ei(是是N和和I的函数)的函数),则则),(),(1INeitINTkii 时间复杂度时间复杂度 一般
3、情况下,不可能也没有必要总是对规模为一般情况下,不可能也没有必要总是对规模为n,基基本运算本运算Oi的执行次数的执行次数ei分别进行统计分析。分别进行统计分析。T(N,I)还需进一步简化,只在某些有代表性的合法输还需进一步简化,只在某些有代表性的合法输入中去统计相应的入中去统计相应的ei来评价其复杂性。来评价其复杂性。一般只考虑三种情况下的时间性:最坏情况、最好一般只考虑三种情况下的时间性:最坏情况、最好情况和平均情况下的复杂性,分别记为情况和平均情况下的复杂性,分别记为Tmax(N)、Tmin(N)和和Tavg(N)四种渐近意义下的符号 四种渐近意义下的符号四种渐近意义下的符号Oo假设假设f
4、(N)和和g(N)是定义在正整数集上的正函数是定义在正整数集上的正函数符号“O”的运算规则);()6()()()5()()12()12()(),(12);()()()()()4()()()()();()()()3();()()()2()(),(max()()();,(max()()()1(322222fOfCNfONCfOnOnnOnOnOnOnfOgOfONfONgnOnnOnOnOfgOgOfOgfOgOfOnOnnOnOnOgfOgOfO为常数;,则例:,则如果例:例:四种渐近意义下的符号之“O”的阶。的阶不高于时还说。这是它的一个上界,记为且充分大时有上界,当,则称函数时,使得当和自然
5、数如果存在正的常数)()()()()()()()(00NgNfNgONfNgNNfNCgNfNNNC注:注:用O评估算法的复杂性,所得到的只是当规模充分大时的一个上界一个上界。该上界的阶越低,评估就越上界的阶越低,评估就越精确,结果就越有价值。精确,结果就越有价值。g通常为下列简单函数单项形式:1,logn,n,nlogn,n2,n3,2n,n!算法时间复杂性以多项式为界的有效算法f四种渐近意义下的符号之“”的阶。的阶不低于时还说。这是它的一个下界,记为且充分大时有下界,当,则称函数时,使得当和自然数如果存在正的常数)()()()()()()()(00NgNfNgNfNgNNfNCgNfNNN
6、C注:注:用 评估算法的复杂性,所得到的只是当规模充分大时的一个下界一个下界。该下界的阶越高,评估就越下界的阶越高,评估就越精确,结果就越有价值。精确,结果就越有价值。四种渐近意义下的符号之“”同阶和称且当且仅当)()()()()()()()(NgNfNgNfNgONfNgNf 请简述对算法复杂性概念的认识 算法的复杂性就是对算法计算所需要的时间和空间的一种度量。算法的时间复杂性是指算法运行所需的时间,可以用元运算(基本运算)所需要运行的次数来进行复杂性的评估。一般用最坏情况、最好情况和平均情况下的三种复杂性对算法的时间复杂性进行分析,其中操作性最好且最具有实用价值的是最坏情况下的时间复杂性。
7、课后练习:1-4假设某算法的T(n)=3x2n,在某台机上实现并完成该算法的时间为t秒。如果有一台机的运行速度是前一台机的64倍,则在这台机上用同一算法在t秒内能解多大规模的问题?t=3x2n=3x2n164 n1=n+6课后练习:1-6答案:答案:12n)2(n22n)2(n成立吗?分治法的基本思想 分治法的基本思想分治法的基本思想 将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立并且与原问题相同。通过递归地求解这些子问题,然后再将各个子问题的解合并,就可以实现对原问题的求解。1log0log)/()(1)()/(1)1()(njjjkmmmnfknnTnnfmnkTnOn
8、T通过解递归方程 学习要点学习要点:理解递归的概念。掌握设计有效算法的分治策略。通过下面的范例学习分治策略设计技巧。(1)二分搜索技术;(2)大整数乘法;(3)Strassen矩阵乘法;(4)棋盘覆盖;(5)合并排序和快速排序;(6)线性时间选择;(7)最接近点对问题;(8)循环赛日程表。分析分析:根据教材的分治法,两个m位数相乘,耗时O(mlog3);m n,把v分成n/m段,每段分别与u做乘法乘,则共需n/m次m位的乘法;因此,算法所需的计算机时间为O((n/m)*mlog3)=O((nmlog(3/2);9 分析分析:(习题:(习题2-9)有序集元素,因为主元素个数大于n/2个,有主元素
9、时,中位数一定是主元素;分析分析:(1)若T 中存在主元素,则将T 分为两部分后,T 的主元素也必为两部分中至少一部分的主元素,因此可用分治法。将元素划分为两部分,递归地检查两部分有无主元素。算法如下:a.若T 只含一个元素,则此元素就是主元素,返回此数。b.将T 分为两部分T1 和T2(二者元素个数相等或只差一个),分别递归调用此方法求其主元素m1和m2。c.若m1 和m2 都存在且相等,则这个数就是T 的主元素,返回此数。d.若m1 和m2 都存在且不等,则分别检查这两个数是否为T 的主元素,若有则返回此数,若无则返回空值。e.若m1 和m2 只有一个存在,则检查这个数是否为T 的主元素,
10、若是则返回此数,若否就返回空值。f.若m1 和m2 都不存在,则T 无主元素,返回空值。(1);4()()(log)2(/2)();4OnT nT nO nnT nO nnCheckMaster(T,p,q):if p q then return Tp and 1 len q p+1 r p+len/2 a and numa CheckMaster(T,p,r 1)b and numb CheckMaster(T,r,q)if a=NIL and b=NIL then return NIL if a=NIL and b NIL then return CheckAnotherPart(T,le
11、n,p,r 1,b,numb)if a NIL and b=NIL then return CheckAnotherPart(T,len,r,q,a,numa)if a NIL and b NIL then if a=b then numa numa+numb return a and numa else re CheckAnotherPart(T,len,p,r 1,b,numb)if re NIL then return re else return CheckAnotherPart(T,len,r,q,a,numa)-CheckAnotherPart(T,len,p,q,c,numc):
12、检查候选主元素是否是主元素检查候选主元素是否是主元素 numc CheckNum(T,p,q,c)+numc if num len/2 then return c and numc else return NIL -CheckNum(T,p,q,element):计算计算Tp.q中中element出现的次数出现的次数 cnt 0 for i p to q do if Ti=element then cnt cnt+1 return cnt (2)线性时间算法 分析分析:因为主元素大于n/2个,可采用相互抵消的方法(模拟打擂台)T1 T2 T3 T4 比较T2i-1 和T2i(1 i n/2)是
13、否相同,相同时,把T2i-1 存入另一个数组Q中,否则什么也不做;比较后数组Q中有m个元素,m n/2,若x是原数组的主元素,则x是Q的主元素;算法实现题:2-2.在一个由元素组成的表中,出现次数最多的元素称为众数.试写一个寻找众数的算法,并分析其计算复杂性.分析与解答:思路一:首先将数组元素按照大小排序,然后按照顺序扫描一遍数组,扫描的同时进行统计,这样通过一次排序和一遍扫描可以找到众数.思路二:直接统计各元素出现的次数,用某一线性数据结构存储统计结果(例如用一个辅助数组存储统计结果,统计时用数组下标对应相应元素)第三章第三章:动态规划动态规划动态规划算法的基本思想 动态规划算法的基本思想动
14、态规划算法的基本思想 其基本思想与分治算法的思想类似分而治之分而治之 与分治法的不同之处 分解后的子问题往往不互相独立;采用记录表的方法来保存所有已解决问题的答案 对每个子问题都只计算一次,不管该子问题以后是否会被用到,都将其保存到一张表中,避免每次遇到各个子问题都要重复计算答案。一个最优化多步决策问题适合用动态规划法求解有两个要素:动态规划算法的一般步骤动态规划算法的一般步骤动态规划算法的一般步骤1.找出最优解的性质,并刻画其结构特征;2.递归地定义最优值;3.以自底向上的方式计算出最优值;4.根据计算最优值时得到的信息,构造最优解;动态规划算法动态规划算法的基本步骤的基本步骤如只需要求出最
15、优值,则步骤如只需要求出最优值,则步骤4可省略;可省略;如需要求解问题的最优解,则必须执行步骤如需要求解问题的最优解,则必须执行步骤4动态规划算法求解思路 动态规划算法求解思路动态规划算法求解思路 将待求解的问题分解成若干个相互联系的子问题,先求解子问题,然后从这些子问题的解得到原问题的解;对于重复出现的子问题,只在第一次遇到的时候对它进行求解,并把答案保存起来,让以后再次遇到时直接引用答案,不必重新求解。动态规划算法将问题的解决方案视为一系列决策的结果,与贪婪算法不同的是与贪婪算法不同的是:在贪婪算法中,每采用一次贪婪准则,便做出一个不可撤回的决策;在动态规划算法中,还要考察每个最优决策序列
16、中是还要考察每个最优决策序列中是否包含一个最优决策子序列否包含一个最优决策子序列,即问题是否具有最优子结构性质。通过应用范例学习动态规划算法设计策略。(1)矩阵连乘问题;(2)最长公共子序列;(3)最大子段和(4)凸多边形最优三角剖分;(5)多边形游戏;(6)图像压缩;(7)电路布线;(8)流水作业调度;(9)背包问题;(10)最优二叉搜索树。矩阵连乘问题-最优解的结构 将矩阵连乘积AiAi+1Aj记作Ai:j 把问题转化成考察把问题转化成考察A1:n的最优计算次序问题的最优计算次序问题 设计算次序在设计算次序在Ak处将矩阵断开最优,则总计处将矩阵断开最优,则总计算量为:算量为:A1:k 的计
17、算量加上的计算量加上Ak+1:n的计算的计算量,再加上量,再加上A1:k 和和Ak+1:n相乘的计算量。相乘的计算量。l关键特征关键特征lA1:n的最优计算次序所包含的计算矩阵子链A1:k和Ak+1:n的次序也是最优的问题的最优解包含了其子问题的最优解,这种性质称为最优子结构性质最优子结构性质。最优子结构性质是该问题可用动态规划算法求解的第一个标志最优子结构性质是该问题可用动态规划算法求解的第一个标志3-1 设计一个O(n2)时间的算法,找出由n个数组成的序列的 最长单调递增子序列。(1 3 2 5 7 6)分析与解答:分析与解答:设有n个数组成的序列存储在数组a中思路思路1:1、对a进行排序
18、,得到排序后的序列b 2、a和b的最长公共子序列就是题目所求的a 的最长单调递归子序列(可用反证法证明)时间复杂度分析时间复杂度分析:使用快速排序算法,时间复杂度O(n*logn),而由书本第74页,可知用动态规划方法求解最长公共子序列的时间复杂度是O(n*m),这里n=m,所以总的时间复杂度为O(n2)。思路思路2:直接使用动态规划求解1、找出具有最优解的性质,并刻画其结构特征 用数组b0:n-1记录以ai(0 in)为结尾元素的最长递归子序列的长度,可知序列a的最长递增子序列的长度为 ,可知bi满足最优子结构的性质。2、递归定义最优值时间复杂度分析时间复杂度分析:需用二重循环来计算bi的值
19、,使用一个循环来扫描a,以求解bi;而在求解bi的当中需要一个循环来扫描a0:i-1,查找小于ai的aj,因此该算法的时间复杂度为O(n2)。3-2 将习题3-1中的算法的计算时间减至O(n*logn)(提示:一个长度为i的候选子序列的最后一个元素至少与一个长度为i-1的候选子序列的最后一个元素一样大,通过指向输入序列中的元素的指针来维持候选子序列)。分析与解答:分析与解答:设有n个数组成的序列存储在数组a中。可用归纳设计策略解决这个问题。1、归纳假设归纳假设是,已知计算序列a0:i-1(in)的最长递增子序列的长度的正确算法。归纳的初始情况是平凡的。对于长度为n的序列a0:n-1,应设法转换
展开阅读全文