算法设计与分析复习要点.doc_第1页
算法设计与分析复习要点.doc_第2页
算法设计与分析复习要点.doc_第3页
算法设计与分析复习要点.doc_第4页
全文预览已结束

下载本文档

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

文档简介

算法是指解决问题的方法和过程。算法是由若干条指令组成的有穷序列。算法特性:输入、输出、确定性、有限性(执行时间和执行次数)(有五个空再加上可行性)。程序是算法用某种程序设计语言的具体实现,程序可不满足有限性的特性。程序调试只能证明程序有错,不能证明程序无错误!算法复杂性 = 算法所需要的计算机资源。算法的复杂性取决于:(1)求解问题的规模N;(2)具体的输入数据I;(3)算法本身的设计A。可操作性最好且最有实际价值的是最坏情况下的时间复杂性。 第二章 递归与分治策略二分搜索技术:O(logn) 大整数乘法:O(nlog3)=O(n1.59) Strassen矩阵乘法:O(nlog7)=O(n2.81) 棋盘覆盖:O(4k) 合并排序和快排:O(nlogn) 线性时间选择:O(n)最接近点对问题:O(nlogn) 循环赛日程表:O(n2)分治法思想:将一个难以解决的问题分割成一些规模较小的相同问题,以便逐个击破,分而治之。 边界条件与递归方程是递归函数的两大要素。递归优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。缺点:递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。分治法时间复杂度分析:T(n)n0若递归方式为减法:T(n) = O(an)若递归方式为除法:f(n)为合并为原问题的开销:f(n)为常数c时:T(n)=O(np) f(n)为线性函数: O(n) ab,p=logba f(n)为幂函数nx时: O(nx) af(b),p=logba证明算法的正确性:部分正确性、终止性。第3章 :动态规划当前决策的最优性取决于其后续决策序列的是否最优。动态规划方法可以保证问题求解是全局最优的。动态规划与贪心算法的比较:相同点:都具有最优子结构性质。不同点:贪心算法具有贪心选择性质;动态规划算法具有子问题重叠性质,子问题空间小;动态规划算法通常以自底向上的方式解各子问题;贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。动态规划通常可以按以下几个步骤进行:(1)找出最优解的性质,并刻画其结构特征;(2)递归地定义最优值;(3)以自底向上的方式计算出各子结构的最优值并添入表格中保存;(4)根据计算最优值时得到的信息,构造最优解。步骤13是动态规划算法的基本步骤。若需要最优解,则必须执行第4步,为此还需要在第3步中记录构造最优解所必需的信息。第四章:贪心算法(最优子结构、贪心选择性质)特点:贪心算法每次选择目前最优的解,即通过一系列局部最优来获得整体最优。贪心算法只有在具有贪心选择性质时才能保证获得整体最优。Prim算法(O(n2)):在连通的情况下选择权值较小的边。Kruskal算法(O(nlogn):在无回路情况下选择权值较小的边。旅行商问题的贪心算法:基本思想:首先设置一个集合Path和当前节点v,然后不断地用贪心选择来扩充这个集合,直至Path包含所有V中顶点。贪心选择:如果VPath中的顶点j是与当前节点v相邻接的顶点中边权最小的,于是就选择j(将j加入Path),并将j作为新的当前节点 。初始化:Path中仅含有源v。活动安排问题:1、最早开始时间:可以增大资源的利用率。2、最早结束时间(更合理):可以使下一个活动尽早开始。最优装载问题:基本思想:每次采用重量最轻者优先装入的贪心选择策略 。贪心算法只有在具有贪心选择性质时才能保证获得整体最优。第5章 :回溯法(可递归实现也可以迭代实现)思想:回溯法从根结点出发,按照深度优先策略搜索(遍历)解空间树,搜索满足约束条件的解。初始时,根结点成为一个活结点,同时也称为当前的扩展结点。在当前扩展结点处,搜索向纵深方向移至一个新结点。这个新结点成为一个新的活结点,并成为当前的扩展结点。如果在当前的扩展结点处不能再向纵深方向移动,则当前的扩展结点就成为一个死结点(即不再是一个活节点)。此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。解题步骤:1、 针对所给问题,定义问题的解空间;2、确定易于搜索的解空间结构;3、以深度优先方式搜索解空间,并在搜索过程中用剪枝函数(1、用约束函数在扩展结点处剪去不满足约束的子树;2、用限界函数剪去得不到最优解的子树)避免无效搜索。子集树:O(2n) 2n个叶子结点 2n+1-1个结点。排列树:O(n!) n!个叶子结点。第6章 :分支限界法思想:分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。分类:队列式(FIFO)分支限界法:将活结点表组织成一个队列,按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。优先队列式分支限界法:将活结点表组织成一个优先队列,按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。最大优先队列:使用最大堆,体现最大效益优先最小优先队列:使用最小堆,体现最小费用优先分支限界法与回溯法的异同:同:都是在问题的解空间上搜索问题解的算法。异:回溯法的求解目标是找出解空间中满足越苏条件的所有解,回溯法以深度优先的方式搜索解空间。 分支限界法是找出满足约束条件的一个解,在某种意义下的最优解,是以广度优先或最小耗费优先的方式搜索解空间。 回溯法只通过约束条件剪去非可行解,而分支限界法不仅通过约束条件,而且通过目标函数的限界来减少无效搜索。第7章 :随机化算法随机化算法的分类:数值随机化算法:主要用于数值问题求解,算法的输出往往是近似解,近似解的精确度与算法执行时间成正比。蒙特卡罗算法:主要用于求解需要准确解的问题,算法可能给出错误解,获得精确解概率与算法执行时间成正比。拉斯维加斯算法:一旦找到一个解, 该解一定是正确的,找到解的概率与算法执行时间成正比。舍伍德算法:一定能够求得一个正确解,确定算法的最坏与平均复杂性差别大时, 加入随机性, 即得到Sherwood算法.伪随机数:线形同余算法设MC(x)是一个一致的(1/2+)正确的蒙特卡罗算法,重复n次调用算法MC(x)得到正确解的概率至少为1-。第8章 :KMP算法的时间复杂度为O(n+m)。Next(j)的计算: 初始化:k=0;j=1;next(j)=0; 后续:if(k=0|pk=pj)+k;+j;next(j)=k; else k=next(k);NP与P问题:P是确

温馨提示

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

评论

0/150

提交评论