版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第6章章 分支限界法分支限界法计算机算法设计与分析内容提要内容提要每一步都非常关键,走好每一步!每一步都非常关键,走好每一步! 1 2 3 理解理解分支限界法的算法策略分支限界法的算法策略与回溯法的区别?与回溯法的区别?1分支限界法基本思想16 0-1背包问题背包问题算法的思想算法的思想 首先,要对输入数据进行预处理,将各物品依其单位首先,要对输入数据进行预处理,将各物品依其单位重量价值从大到小进行排列。重量价值从大到小进行排列。 在下面描述的优先队列分支限界法中,节点的优先级在下面描述的优先队列分支限界法中,节点的优先级由已装袋的物品价值加上剩下的最大单位重量价值的物由已装袋的物品价值加上
2、剩下的最大单位重量价值的物品装满剩余容量的价值和。品装满剩余容量的价值和。 算法首先检查当前扩展结点的左儿子结点的可行性。如算法首先检查当前扩展结点的左儿子结点的可行性。如果该左儿子结点是可行结点,则将它加入到子集树和活结点果该左儿子结点是可行结点,则将它加入到子集树和活结点优先队列中。当前扩展结点的右儿子结点一定是可行结点,优先队列中。当前扩展结点的右儿子结点一定是可行结点,仅当右儿子结点满足上界约束时才将它加入子集树和活结点仅当右儿子结点满足上界约束时才将它加入子集树和活结点优先队列。当扩展到叶节点时为问题的最优值。优先队列。当扩展到叶节点时为问题的最优值。0-1背包问题上界函数上界函数w
3、hile (i = n & wi = cleft) / n表示物品总数,表示物品总数,cleft为剩余空间为剩余空间 cleft -= wi; /wi表示表示i所占空间所占空间 b += pi; /pi表示表示i的价值的价值 i+; if (i = n) b += pi / wi * cleft; / 装填剩余容量装满背包装填剩余容量装满背包return b; /b为上界函数为上界函数0-1背包问题背包问题 while (i != n+1) / 非叶结点非叶结点 / 检查当前扩展结点的左儿子结点检查当前扩展结点的左儿子结点 Typew wt = cw + wi; if (wt best
4、p) bestp = cp+pi; AddLiveNode(up, cp+pi, cw+wi, true, i+1); up = Bound(i+1); / 检查当前扩展结点的右儿子结点检查当前扩展结点的右儿子结点 if (up = bestp) / 右子树可能含最优解右子树可能含最优解 AddLiveNode(up, cp, cw, false, i+1); / 取下一个扩展节点(略)取下一个扩展节点(略)分支限界搜索分支限界搜索过程过程算法思想 解此问题的队列式分支限界法从起始位置a开始将它作为第一个扩展结点。与该扩展结点相邻并且可达的方格成为可行结点被加入到活结点队列中,并且将这些方格标
5、记为1,即从起始方格a到这些方格的距离为1。 接着,算法从活结点队列中取出队首结点作为下一个扩展结点,并将与当前扩展结点相邻且未标记过的方格标记为2,并存入活结点队列。这个过程一直继续到算法搜索到目标方格b或活结点队列为空时为止。即加入剪枝的广度优先搜索。Position offset4; offset0.row = 0; offset0.col = 1; / 右右 offset1.row = 1; offset1.col = 0; / 下下 offset2.row = 0; offset2.col = -1; / 左左 offset3.row = -1; offset3.col = 0; /
6、 上上定义移动方向的定义移动方向的相对位移相对位移 for (int i = 0; i = m+1; i+) grid0i = gridn+1i = 1; / 顶部和底部顶部和底部 for (int i = 0; i = n+1; i+) gridi0 = gridim+1 = 1; / 左翼和右翼左翼和右翼设置边界的围墙设置边界的围墙for (int i = 0; i NumOfNbrs; i+) nbr.row = here.row + offseti.row; nbr.col = here.col + offseti.col; if (gridnbr.rownbr.col = 0) /
7、该方格未标记该方格未标记 gridnbr.rownbr.col = gridhere.rowhere.col + 1; if (nbr.row = finish.row) & (nbr.col = finish.col) break; / 完成布线完成布线 Q.Add(nbr); 找到目标位置后,可以通过回溯方法找到这条最短路径。找到目标位置后,可以通过回溯方法找到这条最短路径。批处理作业调度问题批处理作业调度问题算法描述算法描述 算法的算法的whilewhile循环完成对排列树内部结点的有序扩展。在循环完成对排列树内部结点的有序扩展。在whilewhile循环体内算法依次从活结点优先
8、队列中取出具有最小循环体内算法依次从活结点优先队列中取出具有最小bbbb值(完成时值(完成时间和下界)的结点作为当前扩展结点,并加以扩展。间和下界)的结点作为当前扩展结点,并加以扩展。 首先考虑首先考虑E.s=nE.s=n的情形,当前扩展结点的情形,当前扩展结点E E是排列树中的叶结点。是排列树中的叶结点。E.sf2E.sf2是相应于该叶结点的完成时间和。当是相应于该叶结点的完成时间和。当E.sf2 E.sf2 bestcbestc时更新当时更新当前最优值前最优值bestcbestc和相应的当前最优解和相应的当前最优解bestxbestx。 当当E.snE.sn时,算法依次产生当前扩展结点时,
9、算法依次产生当前扩展结点E E的所有儿子结点。对的所有儿子结点。对于当前扩展结点的每一个儿子结点于当前扩展结点的每一个儿子结点nodenode,计算出其相应的完成时间计算出其相应的完成时间和的下界和的下界bbbb。当当bb bb bestcbestc时,将该儿子结点插入到活结点优先队时,将该儿子结点插入到活结点优先队列中。而当列中。而当bbbb bestcbestc时,可将结点时,可将结点nodenode舍去。舍去。 77 while (E.s = n ) if (E.s = n ) / 叶结点叶结点 if (E.sf2 bestc) bestc = E.sf2; for (int i = 0; i n; i+) bestxi = E.xi; delete E.x;3. 算法描述算法描述 当当E.sf2E.sf2bestcbestc时,更时,更新当前最优值新当前最优值bestcbestc和相和相应的最优解应的最优解bestxbestx783. 算法描述算法描述else / 产生当前扩展结点的儿子结点产生当前扩展结点的儿子结点 for (int i = E.s; i n; i+) Swap(E.xE.s,E.xi); int f1,f2; int bb=Bound(E,f1,f2,y); if (bb bes
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电工(高级)资格证考试题库练习备考题及完整答案详解(名校卷)
- 2025年机场投影仪亮度十年评估报告
- 2025年母婴用品检测市场动态及竞争格局报告
- 2026年溶解氧分析仪项目商业计划书
- 2025年沧州市青县保安员招聘考试真题附答案解析
- 2025年青岛市城阳区留置保安员笔试真题附答案解析
- 电工(高级)资格证考试模拟考试高能附参考答案详解【基础题】
- 2026年石家庄理工职业学院单招职业技能笔试备考试题及答案详解
- 2025年六安市寿县保安员招聘考试真题附答案解析
- 2019级各专业系统解剖学“脊髓与脊神经”习题自测参考答案
- 肌肉骨骼康复学:上肢损伤康复
- 外墙清洗人员培训措施
- 教育教学主题演讲
- 特殊食品产业现状与发展趋势
- 心外科护理教学课件
- DB64∕680-2025 建筑工程安全管理规程
- 海洋能经济性分析-洞察及研究
- 2025年中国MINI-LED市场竞争格局及投资战略规划报告
- 四年级上册数学脱式计算大全500题及答案
- 分位数因子增广混频分位数回归模型构建及应用研究
- DB35T 2169-2024仲裁庭数字化建设规范
评论
0/150
提交评论