已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
回溯法解决01背包问题 回溯法解决01背包问题 1 算法思想2 问题描述3 设计实现 回溯法解决01背包问题 回溯法 是一个既带有系统性又带有跳跃性的的搜索算法 它在包含问题的所有解的解空间树中 按照深度优先的策略 从根结点出发搜索解空间树 算法搜索至解空间树的任一结点时 总是先判断该结点是否肯定不包含问题的解 如果肯定不包含 则跳过对以该结点为根的子树的系统搜索 逐层向其原先结点回溯 否则 进入该子树 继续按深度优先的策略进行搜索 课堂上老师已经讲解过用回溯法解决n 皇后问题 m 图着色问题以及哈密顿环问题 他们有相同的特征即问题的求解目标都是求满足约束条件的全部可行解 而0 1背包是最优化问题 还需要使用限界函数剪去已能确认不含最优答案结点的子树 回溯法解决0 1背包问题 运用回溯法解题通常包含以下三个步骤 a 针对所给问题 定义问题的解空间 b 确定易于搜索的解空间结构 c 以深度优先的方式搜索解空间 并且在搜索过程中用剪枝函数避免无效搜索 0 1背包问题概述 在0 1背包问题中 需对容量为c的背包进行装载 从n个物品中选取装入背包的物品 每件物品i的重量为wi 价值为pi 对于可行的背包装载 背包中的物品的总重量不能超过背包的容量 最佳装载是指所装入的物品价值最高 即取得最大值 约束条件为c和 在这个表达式中 需求出xi的值 xi 1表示物品i装入背包中 xi 0表示物品i不装入背包 回溯法解决01背包问题 回溯法解决01背包问题 问题举例最优值上界 对于0 1背包问题回溯法的一个实例 n 4 M 7 p 9 10 7 4 w 3 5 2 1 这4个物品的单位重量价值分别为 3 2 3 5 4 以物品为单位价值的递减序装入物品 先装入物品4 然后装入物品3和1 装入这3个物品后 剩余的背包容量为1 只能装入0 2个物品2 由此可得到一个解为x 1 0 2 1 1 其相应的价值为22 尽管这不是一个可行解 但可以证明其价值是最有大的上界 因此 对于这个实例 最优值不超过22 回溯法解决01背包问题 0 1背包问题是一个子集选取问题 适合于用子集树表示0 1背包问题的解空间 在搜索解空间树是 只要其左儿子节点是一个可行结点 搜索就进入左子树 在右子树中有可能包含最优解是才进入右子树搜索 否则将右子树剪去 问题分析 首先是将可供选择的物品的个数输入程序 将物品排成一列 计算总物品的体积s 然后输入背包的实际体积V 如果背包的体积小于0或者大于物品的总体积s 则判断输入的背包体积错误 否则开始顺序选取物品装入背包 假设已选取了前i件物品之后背包还没有装满 则继续选取第i 1件物品 若该件物品 太大 不能装入 则弃之而继续选取下一件 直至背包装满为止 但如果在剩余的物品中找不到合适的物品以填满背包 则说明 刚刚 装入背包的那件物品 不合适 应将它取出 弃之一边 继续再从 它之后 的物品中选取 如此重复 直至求得满足条件的解 因为回溯求解的规则是 后进先出 所以要用到栈来存储符合条件的解 在存储过程中 利用数组来存储各个物品的体积 然后用深度优先的搜索方式求解 将符合条件的数组元素的下标存入栈里 最后得到符合条件的解并且实现输出 限界函数 设r是当前剩余物品价值总和 cp是当前结点X的价值 bp是当前X结点上界函数值 L始终为已搜索到的答案节点中受益的最大值 当cp r bp L时可剪去以X为根的子树 计算右子树中解的上界的更好方法是将剩余物品依其单位重量价值排序 然后依次装入物品 直至装不下时 再装入该物品的一部分而装满背包 由此得到的价值是右子树中解的上界 L始终为已搜索到的答案节点中受益的最大值 最优解必定大于等于L 对于任意结点X 若其上界函数值bp L 则可以断定X子树上不含最优答案结点 可以剪去以X为根的子树 Z Y X T bp cp r rp cw cp 考察如下背包问题 n 3 w 11 8 6 p 18 25 20 且M 20 三个对象的背包问题的解空间10101000101010 A B G I F H E L D C L 43 L 43 L 38 L 25 L 20 L 0 L 45 L 18 回溯法解决0 1背包问题 includeintc 背包容量intn 物品数intweight 100 存放n个物品重量的数组intprice 100 存放n个物品价值的数组intcurrentWeight 0 当前重量intcurrentPrice 0 当前价值intbestPrice 0 当前最优值intbestAnswer 100 当前最优解intbp 0 intbA 100 当前最优解inttimes 0 回溯法解决01背包问题 voidPrint voidBacktracking inti times 1 if i n Print if bestPrice bp bp bestPrice for intj 1 j n j bA j bestAnswer j return 回溯法解决01背包问题 if currentWeight weight i c 将物品i放入背包 搜索左子树bestAnswer i 1 currentWeight weight i bestPrice price i Backtracking i 1 完成上面的递归 返回到上一结点 物品i不放入背包 准备递归右子树currentWeight weight i bestPrice price i bestAnswer i 0 Backtracking i 1 回溯法解决01背包问题 voidPrint inti printf n路径为 for i 1 i n i printf d bestAnswer i printf d t价值为 d n bestAnswer i bestPrice voidmain inti 输入部分 printf 请输入物品的数量 n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国建设银行陕西省分行校园招聘备考题库(590人)含答案详解(新)
- 2025黑龙江省农业科学院招聘工作人员32人参考模拟试题及答案解析
- 2025浦发银行图木舒克支行招聘备考题库(4人)及答案详解(全优)
- 2025年辽宁锦州凌河区面向社会公开招聘市容管理工作人员60人备考题库含答案详解(满分必刷)
- 2026国家开发银行秋季校园招聘备考题库含答案详解(培优a卷)
- 2026年度秋季中国工商银行远程银行中心校园招聘68人备考题库附答案详解(基础题)
- 2026中国邮政储蓄银行望江县支行校园招聘备考题库及一套答案详解
- 2025年宁波北仑区白峰街道办事处编外人员招聘1人备考题库及答案详解(网校专用)
- 2025广东梅州市大埔县总工会招聘社会化工会工作者2人备考题库含答案详解(新)
- 健康促进人力资源发展顶层设计方案-1
- 劳动合同简易下载
- 学术交流英语知到章节答案智慧树2023年哈尔滨工程大学
- 越冬维护监理实施细则
- JJF 1915-2021 倾角仪校准规范
- 部编九下语文9 《鱼我所欲也》课后习题参考答案
- 优质课-中国的农业
- 德国格屋集团提升推拉和推拉窗五金系统介绍
- GB/T 12668.4-2006调速电气传动系统第4部分:一般要求交流电压1000V以上但不超过35kV的交流调速电气传动系统额定值的规定
- CB/T 466-1995法兰铸钢闸阀
- (更新版)中国移动政企行业认证题库大全-下(判断题汇总)
- 项目部级安全教育考试题及答案
评论
0/150
提交评论