网站大量收购独家精品文档,联系QQ:2885784924

数据结构及算法内部排序.ppt

  1. 1、本文档共322页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构及算法内部排序

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 应 用 应 用 应 用 解空间树中的结点类型为bbnode,最大优先队列中元素的类型是CliqueNode。当从最大优先队列中选取元素时,选取的是具有最大un值的元素。函数AddCliqueNode用于向生成的子树和最大堆中加入结点。函数BBMaxClique在解空间树中执行最大收益分枝定界搜索,树的根作为初始的扩展结点。while循环不断展开扩展结点直到一个叶结点变成扩展结点,因此最大完备子图已经找到。沿着生成的树中从叶结点到根的路径,即可构造出这个最大完备子图。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 应 用 在上述程序中,回溯算法作为类GraphMatrixND的一个成员来实现,函数MaxClique对解空间树进行搜索,而MaxClique(1)初始化必要的变量。MaxClique(v)的执行返回最大完备子图的尺寸。 数据结构与算法 (C++语言版) 第15章 分枝定界法 算 法 思 想 分枝定界法是另一种系统地搜索解空间的方法,其解空间树也为一棵有序树,如排序树或子集树。它与回溯法的主要区别在于对当前扩展结点所采用的扩展方式不同。在分枝定界法中,每一个活结点有且仅有一次机会变成扩展结点,活结点一旦变为扩展结点,就会一次性地生成其所有的孩子结点(即新结点),在这些孩子结点中,那些不可能导出可行解或最优解的结点将被舍弃,其余的孩子结点被加入活结点表中。然后从表中选择一个结点作为下一个扩展结点,并重复上述结点的扩展过程,直到找到所需要的解或活动表为空时结束。 算 法 思 想 从活结点表中选择下一个扩展结点通常有两种方式。①先进先出(FIFO)法。即从活结点表中取出结点的顺序与加入结点的顺序相同,因此活结点表的性质与队列的相同。②最小耗费或最大收益法。由于解空间中每个结点都有一个对应的耗费或收益,可将活结点表组织成一个优先队列,并根据结点的耗费所确定的结点优先级别来选取下一个结点。如果查找的是具有最小耗费的解,则活结点表可用最小堆来建立,下一个扩展结点就是具有最小耗费的活结点;如果查找的是具有最大收益的解,则可用最大堆来构造活结点表,下一个扩展结点便是具有最大收益的活结点。 例15-1 下面分别用FIFO分枝定界法和最大收益分枝定界方法解决例14-1的背包问题并进行比较,即n = 3,w = [20, 15, 15],p = [40, 25, 25],c = 30,它们的解空间也与上一章例的解空间相同。 ① FIFO分枝定界利用一个队列来记录活结点,结点按照FIFO顺序从队列中取出。在该方法的搜索过程中,初始以根结点A作为扩展结点,活结点队列为空,对A进行扩展时,生成结点B和C,由于这两个结点都是可行的,因此都被加入活结点队列中,结点A被删除。下一个扩展结点B,产生结点D和E,由于D是不可行的,因此被删除,而E被加入队列中。下一步选择结点C为扩展结点,生成结点F和G,两者都是可行结点,加入队列中。下一个扩展结点E生成结点J和K,J不可行而被删除,K是一个可行的叶结点,并产生一个到目前为止可行的解,它的收益值为40。 例15-1 接下来扩展结点F,它产生两个孩子L和M,L代表一个可行的解且其收益值为50,M代表另一个收益值为15的可行解。G是最后一个扩展结点,它的孩子N和O都是可行的。由于活结点队列变为空,因此搜索过程终止,最佳解的收益值为50。 从上述过程可看出,在解空间树上进行的FIFO分枝定界方法类似于从根结点出发的广度优先搜索,它们的主要区别是在FIFO分枝定界法中不可行的结点不会被搜索。 ② 最大收益分枝定界法使用一个最大堆,其中的扩展结点按照每个活结点收益值的降序,或者按照活结点任意子树的叶结点所能获得的收

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档