- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
枚举,回溯,动态规划解决01背包问题课程设计
问题描述
01背包问题:
一个商人带着一个能装m千克的背包去收购货物。现
有n种货物,且第i种货物有wi千克,可获得pi元。假设货物不能拆零,请编写算法帮助商人收购货物,获得最高利润。
算法设计与分析
枚举法分析:
设n个物品的重量和价值分别存储于数组w[ ]和v[ ]中,限制重量为tw.考虑一个n元组(x0,x1,…,xn-1),其中xi=0 表示第i个物品没有选取,而xi=1则表示第i个物品被选取。用枚举法解决背包问题,需要枚举所有的选取方案,而根据上述方法,我们只要枚举所有的n元组,就可以得到问题的解。
显然,每个分量取值为0或1的n元组的个数共为2n个。而每个n元组其实对应了一个长度为n的二进制数,且这些二进制数的取值范围为0~2n-1.因此,如果把0~2n-1分别转化为相应的二进制数,则可以得到我们所需要的2n个n元组。
回溯法分析:
先确定搜索空间:n件物品的取舍数字化,”取”标识为1,否则为0,则搜索的空间为一维数组如:(0,0,0、、、0,0),(0,0,0、、、0,1),(0,0,0、、、10)、、、(1,1,1、、、1,1)这是一颗子集树
确定约束条件:所取物品的质量和不超过m,只有取当前物品时才需要判断所取的质量和不超过m,若不取当前物品时,就无需进行判断,只要一步步进行搜索。
搜索过程中的主要操作:累加所取物品的质量,回溯是还要做现场清理,也就是将当前的物品置为不取状态,且从累加质量中减去当前物品的质量。
动态规划法:
0-1背包问题可以看作是寻找一个序列,对任一个变量 的判断是决定=1还是=0.在判断完之后,已经确定了,在判断时,会有两种情况:
背包容量不足以装入物品i,则=0,背包的价值不增加;
背包的容量可以装下物品i,则=1,背包的价值增加。
这两种情况下背包的总价值的最大者应该是对判断后的价值。
我们可以一步一步的解出我们所需要的解。第一步,只装入第一个物品,确定在各种情况下背包能得到的最大价值;第二步,只装入前两个物品,确定在各种情况下的背包能够得到的最大价值;一次类推,到了第n步就得到我们所需要的最优解了。
测试分析
枚举法
对于一个有n个元素的集合,其子集数量为,所以,不论生成子集的算法效率有多高,穷举法都会导致一个的算法。
回溯法
由于计算上界的函数需要O(n)时间,在最坏情况下有个右儿子结点需要计算上界,所以解0-1背包问题的回溯法算法所需要的计算时间为
动态规划
由于函数中有一个两重for循环,所以时间复杂度为O[(n+1)x(m+1)].空间复杂度也是O[(n+1)x(m+1)],即O(nm).
附录:源代码
枚举法
#include iostream
using namespace std;
#include math.h
#define MAX 100
#include stdlib.h
#includetime.h
//将n化为二进制形式,结果存放到数组b中
void conversion(int n,int b[MAX])
{
int i;
for(i=0;iMAX;i++)
{
b[i] = n%2;
n = n/2;
if(n==0)break;
}
}
void main()
{
long start,end;
start=clock();
int i,j,n,b[MAX],temp[MAX];
float tw,maxv,w[MAX],v[MAX],temp_w,temp_v;
coutplease input n: ;
cinn; // 输入物品个数
coutplease input tw:;
cintw; // 输入背包的限制重量
//输入各个物品的重量
coutplease input the weight : ;
for(i=0;in;i++)
{
cinw[i];
}
//输入各个物品的价值
coutplease input the value : ;
for(i=0;in;i++)
{
cinv[i];
}
maxv = 0;
/*穷举2n个可能的选择,找出物品的最佳选择*/
for (i=0;ipow(2,n);i++)
{
for (j=0;jn;j++)
{
b[j] = 0;
}
conversion(i,b);
temp_v = 0;
temp_w = 0;
您可能关注的文档
- 员工劳动纪律规范.docx
- 物品交接表模板.doc
- 微机原理期中考试试卷及答案.doc
- 个人检查书说明.docx
- 访学协议书样本.doc
- 保温定期检查测温制度.doc
- 帮助学生克服厌学的成功案例.doc
- 小学生网络安全课件.ppt
- 导数与微分介绍.ppt
- 工程建设监理规划及实施细则.doc
- 中国国家标准 GB 10395.6-2025农业机械 安全 第6部分:植物保护机械.pdf
- GB 10395.6-2025农业机械 安全 第6部分:植物保护机械.pdf
- GB 10395.7-2025农业机械 安全 第7部分:联合收割机、饲料收获机、棉花收获机和甘蔗收获机.pdf
- 中国国家标准 GB 10395.7-2025农业机械 安全 第7部分:联合收割机、饲料收获机、棉花收获机和甘蔗收获机.pdf
- 《GB 10395.7-2025农业机械 安全 第7部分:联合收割机、饲料收获机、棉花收获机和甘蔗收获机》.pdf
- GB/T 42076.2-2025生物技术 细胞计数 第2部分:量化计数方法性能的实验设计与统计分析.pdf
- 中国国家标准 GB/T 42076.2-2025生物技术 细胞计数 第2部分:量化计数方法性能的实验设计与统计分析.pdf
- 《GB/T 42076.2-2025生物技术 细胞计数 第2部分:量化计数方法性能的实验设计与统计分析》.pdf
- GB/T 46735.1-2025高温蓄电池 第1部分:一般要求.pdf
- 《GB/T 46735.1-2025高温蓄电池 第1部分:一般要求》.pdf
最近下载
- 高盛中国股票五年计划推介高盛第十五个五年计划投资组合Goldman Sachs-Your 5~Year Plan in China Equities-Introducing GS 15th FYP Portfolio.pdf VIP
- 第九章--网络思想政治教育-《思想政治教育学原理》-马工程.ppt VIP
- NB╱T 47065.4-2018 容器支座第4部分:支承式支座.pdf VIP
- JCT993-2006膨胀聚苯乙烯板抹面砂浆.pdf VIP
- 2025年护理质量管理评价标准考核试题(附答案).docx VIP
- 外科护理讲课课件ppt全新PPT.pptx VIP
- NB╱T 47065.5-2018 容器支座第5部分:刚性环支座.pdf VIP
- 粤教粤科版科学六年级上册全册单元期中期末测试题(含答案).pdf VIP
- 弹性桩m法计算所需系数(用于快速内插取值).xls VIP
- 角的度量.2 角的度量课件.ppt VIP
原创力文档


文档评论(0)