1
《算法设计与分析》课程
综合设计性实验要求
一、实验对象:
必修或选修《算法设计与分析》课程的同学。
二、截至时间:
2013-12-08
之前,由学委统一收了并对文件名命名整理,后打包用邮件来交。
三、实验内容:
0-1
背包问题是一例典型的组合优化的
NP
完全问题。问题可以描述为:给定一组共
n
个物品,每种
物品都有自己的重量
wi, i=1~n
和价值
vi, i=1~n
,在限定的总重量(背包的容量
C
)内,如何选择才能使得
选择物品的总价值之和最高。选择最优的物品子集放置于给定背包中,
最优子集对应
n
元解向量
(x1,
…
xn),
xi
∈
{0
或
1}
,因此命名为
0-1
背包问题。
0-1
背包问题是许多问题的原型,但它又是一个
NP
完全问题。此实验主要研究和实现
n
(0<=n<=200)
和
C
(C<=2000, C
为整数
)
都较大的情形,随机产生
n
个物品的重量向量
wi
(1<=wi<=100, wi
为整数
)
和价值向
量
vi
(1<=vi<=100, vi
为整数
)
。
0-1
背包问题可以用许多方法来求解,有些算法可以得到问题的精确最优解,有些仅能获得一个近似
最优解。
本综合设计性实验要求用
3
种以上的方法求解
0-1
背包问题,
获得精确最优解或近似最优解皆可,
并对所采用的多种算法从运行时间、寻找是否为最优解、能够求解的问题规模等方面进行对比和分析。本
课程讲述的所有算法思想都可以用来求解此问题,甚至本课程未涉及的许多算法也非常适合于求解此问
题,学生可以先尝试先用本课程已介绍的算法来实现和分析,学有余力或兴趣驱动下可以寻找一些智能算
法的资料来试一试。涉及的方法可以有:蛮力求解、递归求解、动态规划求解、贪心求解、回溯法求解、
广度优先的分支限界法求解,优先队列的启发式分支限界法、遗传算法、模拟退火算法、蚁群算法、粒子
群算法等。
为方便这种大规模输入数据的调试,采用文件输入,标准输出(文件输出当然也可)的形式。数据输入的
格式如下:每组测试数据包含
n+1
行,第
1
行为
C
和
n
,表示背包容量为
C
且有
n
个物品,接下来
n
行是这
n
个物品的重量
wi
和价值
vi
。背包容量和物品重量都为整数。
n, C , wi, vi
范围如上所述。
输出
n+1
行。第
1
行为所选物品的最大价值之和,接下来
n
行为装入背包的物品所对应的
n
元最优解向量
(x1,
…
xn), xi
∈
{0
或
1}
,但每行以
"i
xi"
形式输出。
提供一个参考的测试数据(
“
0-1
背包问题测试数据
(
提供参考
).xls
”
)给大家,此数据仅用参考,你也可自
拟测试数据,
对有些复杂度较高的算法可能算不到参考数据中的最大规模的数据
(或算的时间过长)
,
但能算到
多大要测试一下你的算法。
四、实验形式:
不超过
3
人(小组成员人数≤
3
人)形成一组,自由组合,若凑不够人数就
2
人或单人也可。一组只交一
份报告,报告封面上需将小组所有成员的姓名和学号填入,在报告中开始部分说明小组成员的分工。先透彻理
解实验内容,然后思考算法及实现框架,并编程调试测试通过,最后执笔完成《综合设计性实验的实验报告》
。
综合设计性实验报告以“电子版”的形式上交,以班级为单位收集好,由每个班学习委员统一收齐电子版