背包问题贪心算法解决
更新时间:2023-03-29 12:24:01 阅读量: 建筑文档 文档下载
贪心算法求解背包问题
一、 实验内容
有一个承重为W的背包和n个物品,它们各自的重量和价值分别是wi和vin
W wi求这些物品中最有价值的一个子集。如果每次选择某(1<=i<=n),设
i 1一个物品的时候,只能全部拿走,则这一问题称为离散(0-1)背包问题;如果每次
可以拿走某一物品的任意一部分,则这一问题称为连续背包问题。
二、 算法思想
首先计算出物品单位重量的价值vi/wi,并排序,依贪婪策略,从物品中选择可装入背包的vi/wi值最大的物品。若该物品装入背包后,背包中物品总重量未超过背包最大承重m,则选择单位重量价值次之的物品装入背包,依次策略进行下去,直到背包装满为止。
三、 实验过程(C++)
#include<iostream>
using namespace std;
//n表示背包可以存放物品的种类
//指针p指向存放物品价值的数组
//指针q指向存放物品重量的数组
void sort(int n,float *p,float *q)
{
int i;
int j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if((*(p+i))/(*(q+i))<(*(p+j))/(*(q+j)))
{
float f;
f=*(p+i);
*(p+i)=*(p+j);
*(p+j)=f;
f=*(q+i);
*(q+i)=*(q+j);
*(q+j)=f;
}
}
void bag(int n,float m,float *v,float *w,float *x)
{
sort(n,v,w);
int i;
for(i=0;i<n;i++)
{
if(*(w+i)>m)
break;
*(x+i)=1;//可以存放该物品时,置1
m-=*(w+i);//放入后,背包的容量减少
}
//当此时背包的容量不够存放整个物品的情况时,存放一部分 if(i<n)
*(x+i)=m/(*(w+i));
if(*(x+i)!=1)
*(x+i)=0;
}
int main()
{
int m ,n,i;
cout<<"输入背包容量:"<<endl;
cin>>m;
cout<<"输入物品种类:"<<endl;
cin>>n;
float *w=new float[n];
float *v=new float[n];
float *x=new float[n];
cout<<"输入各种物品的重量:"<<endl;
for(i=0;i<n;i++)
cin>>w[i];//各种物品的重量
cout<<"输入各种物品的价值:"<<endl;
for(i=0;i<n;i++)
cin>>v[i];//各种物品的价值
for(i=0;i<n;i++)
*(x+i)=0;
bag(n,m,v,w,x);
cout<<"\n1表示要放入:"<<"\n0表示不放入:"<<endl; cout<<"物品容量内容:";
for(i=0;i<n;i++)
cout<<*(w+i)<<" ";
cout<<"\n物品价值内容:";
for(i=0;i<n;i++)
cout<<*(v+i)<<" ";
cout<<"\n物品存放情况:";
for(i=0;i<n;i++)
cout<<*(x+i)<<" ";
cout<<endl;
return 0;
}
四、 实验结论
输入背包容量:
50
输入物品种类:
3
输入各种物品的重量:
26 23 15
输入各种物品的价值:
18 15 10
1表示要放入:
0表示不放入:
物品容量内容:26 15 23
物品价值内容:18 10 15
物品存放情况:1 1 0
五、 算法复杂度分析
时间复杂度为O(n2);
Tsort = O(在此处键入公式。nlogn); Tf(for循环复杂度为) =n2;
T = sort + Tf = O(nlogn) + O(n2) = O(n2).
正在阅读:
背包问题贪心算法解决03-29
专题 重要金属元素经典精讲-讲义05-17
职高英语拓展模块(1-6单元)题库06-09
对本次投标的详细说明06-03
线性方程组解法的探究06-05
工人入党申请书02-24
分包单位入场须知 - 图文04-21
公路工程竣工资料档案完整目录07-05
毕业论文结束语20篇精选06-13
- 在担当责任中培养主人翁意识
- 疫苗信任危机下的自我救赎
- 2015年湖南省农村信用社招考复习资料
- 《草原》课外阅读:五月的青岛(老舍)
- 最低生活保障申请审批流程
- 2015年中央财经大学保险硕士考研经验汇总@才思
- 司法考试必备—民法笔记(4)
- 2012初级会计实务讲义--行政事业单位会计
- 论东北三省跨界民族非物质文化遗产保护方式
- M4735A-SHANGHAI除颤仪
- 《那一年,面包飘香》
- word上机操作基础试题
- 用双脚弹钢琴的人
- 关于学会感恩的作文
- 2014年一月货币基金BR收益排名
- 二年级语文下册《画风》教学设计及教学反思
- 公因数和最大公因数 0
- 水产用药常识及注意事项
- 通用电气对中国的借鉴意义
- 龙年束姓女孩大气雅致取名大全
- 贪心
- 算法
- 背包
- 解决
- 问题
- 论事业单位的人力资源管理与绩效考核
- 气泡膜、气泡袋工艺流程
- 试谈锅炉无损探伤检测方法
- 语言学第6章习题
- 七年级英语试题第一次单元测试
- 成人高考英语模拟试题(2)
- 大数据分析与应用专业方向招生简章 - 副本
- 2018年【金牌试题】口腔执业医师口腔组织病理学习题:口腔颌面部
- 2017春六年级语文下册第15课母鸡详细讲解教学设计冀教版
- 最小二乘支持向量机建模及应用
- 析《白鲸》主要角色的象征意义
- 关于四大名著的英文presentation
- 岳城卫生院危险化学品安全风险排查自查报告
- 公司工会委员会会员评议职工之家工作制度
- 关于三好学生演讲稿(完整版)
- 6-3.Python中dict的特点
- 基于分布式文件存储的个人信息融合系统的研究与实践
- 积分过程的PID控制器智能优化设计_张建明
- 财政评审中心作出的审核结论原则上不能作为工程结算依据
- 数据库试题 学习