- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、影响回溯算法效率的因素 通过前面具体实例的讨论容易看出,回溯算法的效率在很大程度上依赖于以下因素: (1)产生x[k]的时间; (2)满足显约束的x[k]值的个数; (3)计算约束函数constraint的时间; (4)计算上界函数bound的时间; (5)满足约束函数和上界函数约束的所有x[k]的个数。 好的约束函数能显著地减少所生成的结点数。但这样的约束函数往往计算量较大。因此,在选择约束函数时通常存在生成结点数与约束函数计算量之间的折衷。 * 二、重排原理 对于许多问题而言,在搜索试探时选取x[i]的值顺序是任意的。在其它条件相当的前提下,让可取值最少的x[i]优先。从右图中关于同一问题的2棵不同解空间树,可以体会到这种策略的潜力。 图(a)中,从第1层剪去1棵子树,则从所有应当考虑的分支中一次消去12个分支。对于图(b),虽然同样从第1层剪去1棵子树,却只从应当考虑的分支中消去8个分支。前者的效果明显比后者好。 * (a) (b) 三、回溯法的效率 解空间的结构已经选定,影响回溯法效率的前三个因素就可以确定,只剩下生成结点的数目是可变的,它将随问题的具体内容及结点的不同生成方式而变动。即使对同一问题的不同实例,回溯法所产生的结点数也会有很大变化。对于一个实例,回溯法可能只产生O(n)个结点,而对另一个非常相近的实例,回溯法可能就会产生解空间中的所有结点。 如果解空间的结点数是2n或n!,则在最坏情况下,回溯法的时间耗费一般为O(p(n)2n)或O(q(n)n!)。其中p(n)和q(n)均为n的多项式。 * n=3,c=30 p=(100,1,1),v=(30,20,20) p=(1,1,100),v=(20,20,30) 四、概率方法 对于一个具体的问题来说,回溯法的有效性往往就体现在当问题实例的规模n较大时,它能够用很少的时间就求出问题的解。而对于一个问题的具体实例我们又很难预测回溯法的算法行为。特别是我们很难估计出回溯法在解这一具体事例时所产生的结点数,这是分析回溯法效率的主要困难。 下面我们介绍一个概率算法,用于克服这一困难: 1、基本思想 2、估算m 3、一个实例:8后问题 * 1、基本思想 当应用回溯法解某一具体问题的具体实例I时,可用蒙特卡罗方法来估算回溯法将要产生的结点数目。 该方法的基本思想是:在解空间树上产生一条随机的路径,然后沿此路径估算满足约束条件的结点总数m: 设x是所产生的随机路径上的一个结点,且位于解空间树的第i层上; 对于x的所有儿子结点用约束函数检测出满足条件的结点数目mi; 路径上下一个结点是从x的这mi个孩子中随机选取的; 这条路径一直延伸到一个叶结点或没有满足条件的子结点为止; 通过这些mi的值,就可以估算出解空间树中满足约束条件的结点总数m。 在回溯法求解问题的所有解时,这个数特别有用,因为在这种情况下,解空间中所有满足条件的结点都必须生成;若只要求用回溯法找出问题的一个解,则所生成的结点数一般只是这m个结点中的一小部分,此时用m来估计回溯法生成的结点数就过于保守。 * 2、估算m * 估算m的公式: 2 3 4 2 4 3 3 2 4 3 4 2 4 3 2 4 2 3 * f(n,t)与g(n,t)分别为当前可扩展结点处末搜索过的子树的起始编号和终止编号 constraint(t)和bound(t)分别为当前扩展结点处的约束函数和限界函数 * solution(t)用于判断在当前可扩展结点处是否已得到问题的可行解 * 三、算法设计 解空间:子集树 可行性约束函数(选择当前元素): 上界函数(不选择当前元素):100+80 200 当前载重量CW+剩余集装箱的重量R ≤当前最优载重量BestW 用回溯法设计解装载问题的O(2n)计算时间算法。在某些情况下该算法优于动态规划算法。 * 四、算法描述 void backtrack (int i) {// 搜索第i层结点 if (i n) // 到达叶结点 更新最优解bestx,bestw;return; r -= w[i]; if (cw + w[i] = c) //搜索左子树 { x[i] = 1; cw += w[i]; backtrack(i + 1); cw -= w[i]; } if (cw + r bestw) { x[i] = 0; // 搜索右子树 backtrack(i + 1); } r += w[i]; } * int MaxLoading(int w[],int c,int n,int bestx[]){//迭代回溯 for(int j=1;j=
您可能关注的文档
最近下载
- 津津有味·读经典Level3《金银岛》译文和答案.docx
- SHT3503-2017石油化工建设工程项目交工技术文件规定.pdf VIP
- 九年级下学期班主任工作总结_九年级下学期的班主任工作总结范文.docx VIP
- 九年级下学期班主任工作计划--班主任工作计划.docx VIP
- 九年级班主任上学期工作计划 九年级上学期班主任学期工作计划(通用6篇).docx VIP
- 九年级上学期班主任工作总结.docx VIP
- 八年级下学期班主任工作总结-班主任工作总结.doc VIP
- 七年级上《第2章整式的加减》测试题及答案(数学试卷新课标人教版七年级上单元试题).doc VIP
- 八年级下学期班主任工作计划-班主任工作计划.doc VIP
- 班主任上学期工作计划:八年级上学期班主任工作计划.doc VIP
原创力文档


文档评论(0)