算法设计与分析基础看第2版清华出版社算法分析第8章.pptVIP

算法设计与分析基础看第2版清华出版社算法分析第8章.ppt

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设计与分析基础看第2版清华出版社算法分析第8章

动态规划(dynamic programming)是一种算法设计技术,它有着相当有趣的历史。作为一种使多阶段决策过程最优的通用方法,它是在20世纪50年代由一位卓越的美国数学家Richard Bellman所发明的。因此,这个技术名字中的“Programming”是计划和规划的意思,不是代表计算机中的编程。它作为一种重要的工具在应用数学中的价值被大家认同以后,起码在计算机科学的圈子里,人们不仅用它来解决特定类型的最忧问题,而且最终把它作为一种通用的算法设计技术来使用。在这里,我们正是从这个角度来考虑这种技术的。 如果问题是由交叠的子问题所构成的,我们就可以用动态规划技术来解决它。一般来说,这样的于问题出现在对给定问题求解的递推关系中,这个递推关系中包含了相同类型的更小子问题的解。动态规划法建议,与其对交叠的子问题一次又一次地求解,还不如对每个较小的子问题只求解一次并把结果记录在表中,这样就可以从表中得出原始问题的解 8.1 计算二项式系数 计算二项式系数是把动态规划应用于非最优化问题的一个标准例子 在二项式系数的多种特性之中,只关心两种: 当nk0时,C(n,k)=C(n-1,k-1)+C(n-1,k) 以及 C(n,0)=C(n,n)=1 为了计算c(n,k),一行接一行地填充下表,从行0开始,到行n结束 算法 Binomial(n,k) //用动态规划算法计算C(n,k) //输入:—对非负整数n=k=0 //输出:C(n,k)的值 for i← 0 to n do for j ← 0 to min(i,k) do if j=0 or j=k C[i,j] ← 1 else C[i,j] ←C[i-1,j-1]+C[i-1,j] return C[n,k] 该算法的时间效率如何呢?显然,该算法的基本操作是加法 8.2 Warshall算法和FLoyd算法 8.2.2 Warshall算法 一个有向图的邻接矩阵A={aij}是一个布尔矩阵,当且仅当从第i个顶点到第j个顶点之间有一条有向边时,矩阵第i行第j列的元素为1。 定义 一个n顶点有向图的传递闭包可以定义为一个n阶布尔矩阵T={tij} ,如果从第i个到顶点到第j个顶点之间存在一条有效的有向路径,矩阵第i行(1≤i ≤n)第j列(1≤j ≤n)的元素为1;否则,tij为0。 我们可以在深度优先查找和广度优先查找的帮助下生成有向图的传递闭包。从第i个顶点开始,无论采用哪种遍历方法,都能够得到通过第i个顶点访问到的所有顶点的信息,因此,传递闭包的第i行的相应列置为了1。以每个顶点为起始点做一次这样的遍历就生成了整个图的传递闭包。 Warshall算法通过一系列n阶布尔矩阵来构造一个给定的n个顶点有向图的传递闭包,算法的中心思想是,任何中的所有元素都可以通过它在序列(8.5)中的直接前趋计算得到。 : 式(8.7)是Warshall算法的核心 算法 Warshall(A[1..n,1..n]) //实现计算传递闭包的Warshall算法 //输入:包括n个顶点有向图的邻接矩阵A //输出:该有向图的传递闭包 8.2.2计算完全最短路径的Floyd算法 绐定一个加权连通图(无向的或有向的),完全最短路径问题要求找到从每个顶点到其他所有顶点之间的距离(最短路径的长度) Floyd算法通过一系列n阶矩阵来计算一个n顶点加权图的距离矩阵: 每一个这种矩阵都包含了所讨论的矩阵在特定路径约束下的最短路径的长度 每条这种路径都由两条路径构成:一条从vi到vk的路径,路径中每个中间顶点的编号都大于K一1;一条从vi到vj的路径,路径中每个中间顶点的编号也都不大于k-1. 算法 Floyd(W[1..n,1..n]) // 实现计算完全最短路径的Floyd算法 // 输入:图的权重矩阵W // 输出:包含最短路径长度的距离矩阵 8.3 最优二叉树 考虑分别以概率0.1,0.2,0.4,0.3来查找4个键A,B,C,D。包含这些键的二叉查找树有14种不同的可能 在成功查找时,第一棵树的平均键值比较次数为0.1*1+0.2*2+0.4*3+0.3*4=2.9,而第二棵树是0.1*2+0.2*1+0.4*2+0.3*3=2.1。 作为一个通用的算法,这种穷举查找方法是不现实的:包含n个键的二叉查找树的总数量等于第n个卡塔兰数

文档评论(0)

186****0772 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档