回溯法、分支限界法解0-1背包问题(计算机算法设计与分析实验报告).docxVIP

  • 316
  • 0
  • 约1.02万字
  • 约 13页
  • 2021-02-05 发布于天津
  • 举报

回溯法、分支限界法解0-1背包问题(计算机算法设计与分析实验报告).docx

PAGE PAGE # 回溯法、 分支限界法解 0-1背包问题(计算机 算法设计与分析实验报 告) -CAL-FENGHAI.-(YICAI)-Company One 1 实验报告 课程名称: 算法设计与分析 实验名称:回溯法、分支限界法解04背包问题 任课教师:张锦雄专业:计算机科学与技术 班级:2007级1班学号: 姓名: 蓝冠恒完成FI期: 20M年1目12旦 实验目的: 掌握回溯法、分支限界法的原理,并能够按其原理编程实现解决0J背包问题, 以加深对回溯法、分支限界法的理解。 二、主要实验内容及要求: 要求分别用回溯法和分支限界法求解0-1背包问题; 要求交互输入背包容量,物品重量数组,物品价值数组; 3. 要求显示结果。 三、实验环境和工具: 操作系统:win7操作系统 开发工具:eclipse3.4x jdkl.6 开发语言:java 四、实验结果与结论:(经调试正确的源程序和程序的运行结果) 1.1s回溯法求解0-1背包问题源代码: package on.lgh; import j ava ? io ? BufferedReader; import j ava ? io ?InputStreamReader; import j ava ? util? Arrays; import j ava ? util? Comparator; j * * *回溯法解0-1背包问题。 @au七hor蓝冠恒 / public class BTKnapsack { double c; //背包重星 int n; //物品总数 double [ ] w;//物品重星数组 double [ ] p;//物品价值数组 double cw; //当前重星 double cp; //当前价值 double bestp; //当前最优价值 /** *回溯法解0-1背包问题。 Qparam pp 物品价值数组 Qparam ww 物品重星数组 @param cc 背包重星 ?return最优价值 */ public double knapsack(double pp [ ], double ww[], double cc) { c = cc; n = pp?length; cw = 0.0; cp = 0?0; bestp = 0?0; Element[] q = new Element[n]; for (int i = 0; i n; i++) { q[i] = new Element(i + 1, pp[i] / ww[i]); } Arrays ? sort(q, new ElemComparator()); p = new double[n + 1]; w = new double[n + 1]; for (int i = 1; i = n; i++) { p[i] = PP[q[i 一 l]?id 一 1]; w[i] = ww[q[i - 1].id - 1]; } backtrack(1); return bestp; } //回溯过程 private void backtrack(int i) { if (i n) {//达到叶节点 bestp = cp; return; } if (cw + w[i] = c) { cw += w[i]; op += p [i]; backtrack(1 + i); cw -= w[i]; cp -= p [i]; } if (bound(i + 1) bestp) { backtrack(1 + i); } } //计算上界值 private double bound(int i) { double cleft = c - cw; double bound = cp; //以物品单位重量价值递减顺序装入物品 while (i = n w[i] = cleft) { cleft -= w[i]; bound += p[i]; i++; } //装满背包 if (i = n) { bound += p[i] * cleft / w[i]; } return bound; } *物体编号和单位害星价值载体。 * ?author蓝冠恒 */ public class Element { int id;// 编号 double d; //单位重星价值 public Element(int id, double d) { this ?id = id; this ?d = d; } } *比较器* @author *比较器 * @author 蓝冠恒 public class ElemComparator implements ComparatorObj ect Obj ect obj

文档评论(0)

1亿VIP精品文档

相关文档