- 316
- 0
- 约1.02万字
- 约 13页
- 2021-02-05 发布于天津
- 举报
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
您可能关注的文档
最近下载
- 关节置换课件.pptx VIP
- 脉冲微分方程边值问题解的存在性:理论与应用新探.docx VIP
- 2025高考物理步步高同步练习必修3第十章电势差与电场强度的关系含答案.docx VIP
- 人教版高中数学必修一章节思维导图全套.pdf VIP
- 深度解析(2026)《GAT 147-2019法医学 尸体检验技术总则》.pptx VIP
- 变分法研究几类分数阶脉冲微分方分程边值问题解的存在性.docx VIP
- 《中小学生欺凌防治制度机制指引》全文.pdf VIP
- 普通话水平考必试读词语表.doc VIP
- 汽车租赁合同模板范本.docx VIP
- 2025高考物理步步高同步练习选修1第一章 动量专题强化3 弹簧—小球模型 滑块—光滑斜(曲)面模型含答案.docx VIP
原创力文档

文档评论(0)