- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
cw是当前载重量-Read.ppt
◎ Software College , NEU 装载问题 例 w={ 16, 15, 15}, c = 30 2 算法描述 templateclass Type class Loading{ friend Type MaxLoading(Type[],Type,int); private: void Backtrack(int i); int n; //集装箱数 Type * w, //集装箱重量数组 c, //第一艘轮船的载重量 cw, //当前载重量 bestw; //当前最优载重量 }; Backtrack( int i ) { //搜索第i层结点 如果到达叶结点,则判断当前的cw,如果比前面得到的最优解bestw好,则替换原最优解。 //搜索左子树 如果当前剩余空间可以放下当前物品也就是, cw + w[ i ] = c,则把当前载重 cw += w[ i ],递归访问其左子树,Backtrack( i + 1 ),访问结束,回到调用点, cw - = w[ i ] //搜索右子树 Backtrack( i + 1 ); } 3.上界函数 在改进算法中,引入类Loading的一个私有变量r,用于计算上界函数,引入上界函数后,在达到一个叶结点时就不必再检查该叶结点是否优于当前最优解。 因为上界函数使算法搜索到的每个叶结点都是迄今为止找到的最优解,时间复杂性没有变化,但在平均情况下改进后的算法检查的结点数较少 Templateclass Type class Loading{ friend Type MaxLoading(Type[ ],Type, int ); private: void Backtrack(int i); int n; //集装箱数 Type * w, //集装箱重量数组 c, //第一艘轮船的载重量 cw, //当前载重量 bestw, //当前最优载重量 r; //剩余集装箱重量 }; * 1. 问题描述 有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i 的重量为wi,且 装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上这2艘轮船。如果有,找出一种装载方案。 例如,当n = 3, c1 = c2 = 50,且w = [ 10, 40, 40 ],则可以将集装箱1和2装到第一艘轮船上,而将集装箱3装到第二艘轮船上;如果w =[ 20, 40, 40],则无法将这3个集装箱都装上轮船。 如果一个给定装载问题有解,则采用下面的策略可得到最优装载方案。 (1)首先将第一艘轮船尽可能装满; (2)将剩余的集装箱装上第二艘轮船。 装载问题等价于以下特殊的0-1背包问题。 用动态规划算法解这个特殊的0-1背包问题,所需的计算时间是O(min{c1,2n})用回溯法设计解装载问题的O(2n)计算时间算法。在某些情况下该算法优于动态规划算法。 0 16 0 31 0 0 0 31 16 30 0 16 15 15 15 1 0 0 0 0 0 0 0 1 1 1 1 1 31 31 用子集树表示其解空间,用可行性约束函数可剪去不 满足条件 的子树。在子集树的第j+1层的结点Z 处,用cw记当前的装载重量,即 cw= ,则当cw c1 时,以结点Z为根的子 树中所有结点都不满足约束条件, 因而该子树中的解均为不可行解,故可将该子树剪去。 函数MaxLoading负责该类成员的初始化,返回不超过c的最大子集和,但未给出达到这个最大子集和的相应子集 Backtrack实现回溯搜索,Backtrack(1)实现对整个解空间的回溯搜索,Backtrack(i)搜索子集树中第i层子树。 template class Type Type MaxLoading( Type w[ ],Type c, int n ) { //返回最优载重量 Loading Type x; x. w = w; x. c = c; x. n = n; x. bestw = 0; x. cw = 0; //计算最优载重量 x.Backtrack( 1 ); return
您可能关注的文档
- AMB-289安全注意事项(中文)-JUKI.PDF
- AN00021EFM32和EFR32无线Gecko系列1硬件设计注意事项.PDF
- AP-276-TR-2016-01公共航空运输经营人危险品航空运输许可管理程序.PDF
- AQT9006-2010文件的结构隐患排查和治理(第58条)重大危险源监控.ppt
- ASE加速溶剂萃取技术专辑-ThermoFisherScientific.PDF
- AutomationExtremeWireless用于复杂设备和关键应用的安全开关.PDF
- A、复习提纲-硬件和射频工程师.doc
- A直插式LED(Lightemittingdiode)-中国LED网.ppt
- BIM在装配式建筑设计与施工中的应用实践-预制建筑网.PDF
- BrukerXtreme多模式小动物活体成像系统(吴伟全).ppt
文档评论(0)