第三章算法设计方法16k.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设计技术 评价算法的好坏,是算法分析的中心内容。本章研究一些常用的算法设计技术。虽然设计一个好的问题求解算法更象是一门艺术,而不象是技术,但仍然存在一些行之有效的能够用于解决许多问题的算法设计方法,我们可以使用这些方法来设计算法,并观察这些算法是如何工作的。一般情况下,为了获得较好的性能,必须对算法进行细致的调整。但是在某些情况下,算法经过调整之后性能仍然无法达到要求,这时就必须寻求另外的方法来解决该问题。本章首先提供了五种基本的算法设计技术:贪心算法、分而治之算法、动态规划、回溯和分枝定界方法。而其它的常用高级方法如线性规划、整数规划、遗传算法等则没有提及。有关这些方法的详细描述请参见相关书籍。 3.1 贪心算法 3.1.1 最优化问题 本章许多例子都是最优化问题(optimization problem),每个最优化问题都包含一组限制条件(constraint)和一个优化函数(optimization function),符合限制条件的问题求解方案称为可行解(feasible solution),使优化函数取得最佳值的可行解称为最优解(optimal solution)。 例3-1 [装载问题]有一艘大船准备用来装载货物。所有待装货物都装在货箱中,所有货箱大小都一样,但货箱的重量都各不相同。设第I个货箱的重量为wi(1≤i≤n),而货船的最大载重量为c,我们的目的是在货船上装入最多的货物。 这个问题可以作为最优化问题进行描述:设存在一组变量,其可能取值0或1。如为0,则货箱将不被装上船;如为1,则货箱将被装上船。我们的目的是找到一组,使它满足限制条件且。相应的优化函数是。 满足限制条件的每一组都是一个可行解,能使取得最大值的方案是最优解。 例3-2 [最小代价通讯网络] 城市及城市之间所有可能的通信连接可被视作一个无向图,图的每条边都被赋予一个权值,权值表示建成由这条边所表示的通讯连接所要付出的代价。包含图中所有顶点(城市)的连通子图都是一个可行的解。设所有的的权值都非负,则所有可能的可行解都可表示成无向图的一组生成树,而最优解是其中具有最小代价的生成树。 在这个问题中,需要选择一个无向图中的边集合的子集,这个子集必须满足如下限制条件:所有的边构成一个生成树。而优化函数是子集中所有边的权值之和。 3.1.2 算法思想 在贪心算法(greedy method)中采用逐步构造最优解的方法。在每个阶段,都做出一个看上去最优的策略(在一定的标准下)。决策一旦做出,就不可再更改。做出贪心决策的依据称为贪心准则(greedy criterion)。 例3-3 [找零钱] 一个小孩买了价值少于1元的糖,并将1元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。假设提供了数目不限的面值为25分、10分、5分和1分的硬币。售货员分步骤组成要找的零钱,每次加入一个硬币。选择硬币时所采用的贪心准则如下:每一次选择应使零钱数尽量增大。为保证解法的可行性(即:所给的零钱等于要找的零钱数),所选择的硬币不应该使零钱总数超过最终所需的数目。 假设需要找给小孩67分,首先入选的是两枚25分的硬币,第三枚应选择10分的硬币,然后是5分的,最后加入两个1分的硬币。 贪心算法有种直觉的倾向,在找零钱时,直觉告诉我们应该使找出的硬币数目最少(至少是接近最少的数目)。可以证明采用上述贪心算法找零钱时所使用的硬币数目的确最少。 例3-4 [机器调度]现有件任务和无限多台机器,任务可以在机器上得到处理。每件任务的开始时间为,完成时间为,。为处理任务的时间范围。两个任务重叠是指两个任务的时间范围区间有重叠,而并非是指的起点或终点重合。一个可行的任务分配是指在分配中没有两件重叠的任务分配给同一台机器。因此,在可行的分配中,每台机器在任何时刻最多只处理一个任务。最优分配是指使用的机器最少的可行分配方案。 假设有件任务,标号为到。它们的开始与完成时间如图3-1a)所示,若将任务分配给机器,任务分配给机器,…,任务分配给机器,这种分配是可行的分配,共使用了七台机器。但它不是最优分配,因为由其它分配方案可使利用的机器数目更少,例如,可以将任务分配给同一台机器,则使用机器的数目降为五台。 一种获得最优分配的贪心方法是逐步分配任务。每步分配一件任务,且按任务开始时间的非递减次序进行分配。若已经至少有一件任务分配给某台机器,则称这台机器是旧的;若机器非旧,则它是新的。在选择机器时,采用以下贪心准则:根据欲分配任务的开始时间,若此时有旧的机器可用,则将任务分配给旧的机器。否则,将任务分配给一台新的机器。 任务 开始 完成 a b c d e f g 0 3 4 9 7 1 6 2 7 7 11 10

文档评论(0)

精品文库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档