- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1)登上算法
用登山算法求解背包问题 function []=DengShan(n,G,P,W) %n是背包的个数,G是背包的总容量,P是价值向量,W是物体的重量向量 %n=3;G=20;P=[25,24,15];W2=[18,15,10];%输入量 W2=W; [Y,I]=sort(-P./W2);W1=[];X=[];X1=[]; for i=1:length(I) W1(i)=W2(I(i)); end W=W1; for i=1:n X(i)=0; RES=G;%背包的剩余容量 j=1; while W(j)=RES X(j)=1; RES=RES-W(j); j=j+1; end X(j)=RES/W(j); end for i=1:length(I) X1(I(i))=X(i); end X=X1; disp(装包的方法是);disp(X);disp(X.*W2);disp(总的价值是:);disp(P*X);
时间复杂度是非指数的
2)递归法
先看完全背包问题
一个旅行者有一个最多能用m公斤的背包,现在有n种物品,每件的重量分别是W1,W2,...,Wn,
每件的价值分别为C1,C2,...,Cn.若的每种物品的件数足够多.
求旅行者能获得的最大总价值。
本问题的数学模型如下:
设 f(x)表示重量不超过x公斤的最大价值,
则 f(x)=max{f(x-i)+c[i]} 当x=w[i] 1=i=n
可使用递归法解决问题程序如下:
program knapsack04;
const maxm=200;maxn=30;
type ar=array[0..maxn] of integer;
var m,n,j,i,t:integer;
c,w:ar;
function f(x:integer):integer;
var i,t,m:integer;
begin
if x=0 then f:=0 else
begin
t:=-1;
for i:=1 to n do
begin
if x=w[i] then m:=f(x-i)+c[i];
if mt then t:=m;
end;
f:=t;
end;
end;
begin
readln(m,n);
for i:= 1 to n do
readln(w[i],c[i]);
writeln(f(m));
end.
说明:当m不大时,编程很简单,但当m较大时,容易超时.
4.2 改进的递归法
改进的的递归法的思想还是以空间换时间,这只要将递归函数计算过程中的各个子函数的值保存起来,开辟一个
一维数组即可
程序如下:
program knapsack04;
const maxm=2000;maxn=30;
type ar=array[0..maxn] of integer;
var m,n,j,i,t:integer;
c,w:ar;
p:array[0..maxm] of integer;
function f(x:integer):integer;
var i,t,m:integer;
begin
if p[x]-1 then f:=p[x]
else
begin
if x=0 then p[x]:=0 else
begin
t:=-1;
for i:=1 to n do
begin
if x=w[i] then m:=f(i-w[i])+c[i];
if mt then t:=m;
end;
p[x]:=t;
end;
f:=p[x];
end;
end;
begin
readln(m,n);
for i:= 1 to n do
readln(w[i],c[i]);
fillchar(p,sizeof(p),-1);
writeln(f(m));
end.
3)贪婪算法
改进的背包问题:给定一个超递增序列和一个背包的容量,然后在超递增序列中选(只能选一次)或不选每一个数值,使得选中的数值的和正好等于背包的容量。
代码思路:从最大的元素开始遍历超递增序列中的每个元素,若背包还有大于或等于当前元素值的空间,则放入,然后继续判断下一个元素;若背包剩余空间小于当前元素值,则判断下一个元素
简单模拟如下:
#define K 10
#define N 10
#i nclude stdlib.h
#i nclude conio.h
void create(long array[],int n,int k)
{/*产生超递增序列*/
int i,j;
array[0]=1;
for(i=1;in;i++)
{
l
您可能关注的文档
- Zara北京世贸天阶购物中心店陈列赏析.doc
- zbx毕业设计开题模板.doc
- ZH-3嵌入式线路故障录波器监测装置.doc
- ZigBee谁为王谁为寇.doc
- ZKGK系列ARM嵌入式工业控制平板电脑-7吋ARM.doc
- Zlqhme新托福阅读四大杀手锏.doc
- ソフトウェア常用文型.doc
- 爱沙发卡锁系统软件安装与使用说明2010-4-20.doc
- 安徽教育网台常见问题及解决方法.doc
- 安徽理工大学本科毕业论文模板.doc
- 六年级下册道德与法治第三单元《多样文明 多彩生活》测试卷精品【必刷】.docx
- 六年级下册道德与法治第三单元《多样文明 多彩生活》测试卷精品【夺分金卷】.docx
- 六年级下册道德与法治第三单元《多样文明 多彩生活》测试卷精品【名师推荐】.docx
- 六年级下册道德与法治第三单元《多样文明 多彩生活》测试卷精品【含答案】.docx
- 六年级下册道德与法治第三单元《多样文明 多彩生活》测试卷精品【巩固】.docx
- 六年级下册道德与法治第三单元《多样文明 多彩生活》测试卷精品【名师推荐】.docx
- 六年级下册道德与法治第三单元《多样文明 多彩生活》测试卷精品.docx
- 六年级下册道德与法治第三单元《多样文明 多彩生活》测试卷精品【含答案】.docx
- 2025年四川大学校聘非事业编制岗位招聘26人(第一批)笔试高频难、易错点备考题库带答案详解.docx
- 六年级下册道德与法治第三单元《多样文明 多彩生活》测试卷精品【考试直接用】.docx
最近下载
- 2024年四川省遂宁四校联考数学九上开学检测模拟试题【含答案】.doc VIP
- (高清版)-B-T 24810.2-2021 起重机 限制器和指示器 第2部分:流动式起重机.pdf VIP
- 辽2002G802 钢筋混凝土建筑抗震构造.docx VIP
- 《叶酸培训课件》PPT课件.pptx VIP
- TCES 281-2024 火电机组增加调相功能实施导则.docx VIP
- (上古易国学堂)常用汉字五行字库.pdf VIP
- 社区护理学理论知识考核试题题库与答案.pdf VIP
- 专业绿色施工节能减排的管理措施和实施记录(标准版).doc VIP
- 五行字库大全.docx VIP
- 电工用铝和铝合金在电缆工业中的应用与前景.pdf VIP
文档评论(0)