ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:120.47KB ,
资源ID:5980915      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5980915.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(河北工业大学算法分析实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

河北工业大学算法分析实验报告.docx

1、河北工业大学算法分析实验报告算法设计与分析实验报告一、实验目的与要求:熟悉C/C+语言的集成开发环境;通过本实验加深对贪心算法、动态规划和回溯算法的理解。二、实验内容:掌握贪心算法、动态规划和回溯算法的概念和基本思想,分析并掌握0-1背包问题的三种算法,并分析其优缺点。三、实验题:1. 0-1背包问题的贪心算法2. 0-1背包问题的动态规划算法3. 0-1背包问题的回溯算法四、实验步骤:1. 理解算法思想和问题要求;2. 编程实现题目要求;3. 上机输入和调试自己所编的程序;4. 验证分析实验结果;5. 整理出实验报告。五、实验程序:1、“0-1”背包问题的贪心算法源程序#include st

2、ruct goodinfo float p; /物品效益 float w; /物品重量 float X; /物品该放的数量 int flag; /物品编号 ;/物品信息结构体 void Insertionsort(goodinfo goods,int n) int j,i; for(j=2;jgoodsi.p) goodsi+1=goodsi; i-; goodsi+1=goods0; /按物品效益,重量比值做升序排列 void bag(goodinfo goods,float M,int n) float cu; int i,j; for(i=1;i=n;i+) goodsi.X=0; cu

3、=M; /背包剩余容量 for(i=1;icu)/当该物品重量大与剩余容量跳出 break; goodsi.X=1; cu=cu-goodsi.w;/确定背包新的剩余容量 if(i=n) goodsi.X=cu/goodsi.w;/该物品所要放的量 /*按物品编号做降序排列*/ for(j=2;j=n;j+) goods0=goodsj; i=j-1; while (goods0.flaggoodsi.flag) goodsi+1 = goodsi; i-; goodsi+1=goods0; cout最优解为:endl; for(i=1;i=n;i+) cout第i件物品要放:; coutgo

4、odsi.Xendl; void main() cout|-运用贪心法解背包问题-|endl; cout|-|endl; int j; int n; float M; goodinfo *goods;/定义一个指针 while(j) coutn; goods=new struct goodinfo n+1;/ coutM; coutendl; int i; for(i=1;i=n;i+) goodsi.flag=i; cout请输入第igoodsi.w; cout请输入第igoodsi.p; goodsi.p=goodsi.p/goodsi.w;/得出物品的效益,重量比 coutendl; I

5、nsertionsort(goods,n); bag(goods,M,n); coutpress to run agianendl; coutpress to exitj; 2、“0-1”背包问题动态规划算法远程序:#include #define MAX 20int n,c,wMAX,vMAX,mMAXMAX=0;void knapsack() int i,j; for (i=1; i=n; i+) for (j=1; j=wi-1 & mi-1j-wi-1+vi-1 mij ) mij=mi-1j-wi-1+vi-1; /显示所取的物品及其重量(其中一个解)/对数组m的最后一列检查来求解v

6、oid disp( ) int i,j; i=n; while ( mic=mi-1c ) i-; while (i0) j=i-1; while (mic-mjc!=vi-1 & j0) j-; printf(%5d%5dn,wi-1,vi-1); i=j; void main( ) int i,j; printf(输入物品种数:); scanf(%d,&n); printf(输入每种物品的重量与价值:n); for (i=0; in; i+) scanf(%d%d,&wi,&vi); printf(输入背包的总重量:n); scanf(%d,&c); knapsack(); disp();

7、 printf(最大价值=%dn,mnc); for (i=0; i=n; i+) for (j=0; j=c; j+) printf(%3d,mij); printf(n); 3、0-1背包问题的回溯算法源程序:#include using namespace std;void input(int *number,int * weight,int * price)int i,n;coutweight0;cout*number;cout各物品的重量: ;for(i=1;iweighti;cout各物品的价值: ;for(i=1;ipricei; void backtrack(int t,int

8、 n,int *weight,int *price,int *maxPrice,int *flag,int *nowWeight,int *nowPrice,int *x)int i;if(tn) if(*nowWeight*maxPrice) *maxPrice=*nowPrice; flag0=0; for(i=1;i=n;i+) if(xi) flag+flag0=i; return;else for(i=0;i=1;i+) xt=i; *nowWeight+=weightt*i; *nowPrice+=pricet*i; backtrack(t+1,n,weight,price,max

9、Price,flag,nowWeight,nowPrice,x); *nowWeight-=weightt*i; *nowPrice-=pricet*i; void output(int *maxPrice,int *flag)int i;coutendl;cout物品的最大价值为:*maxPriceendl;cout选中的物品为:;for(i=1;i=flag0;i+) coutflagi ;coutendl;int main()int temp1=0,temp2=-1,temp3=0,temp4=0;/这一行很重要!int *number=&temp1,weight100,price100

10、;int *maxPrice=&temp2,flag100,*nowWeight=&temp3,*nowPrice=&temp4,x100;input(number,weight,price);backtrack(1,*number,weight,price,maxPrice,flag,nowWeight,nowPrice,x);output(maxPrice,flag);return 0;六、实验结果:1、贪心算法实验结果:2、动态规划法实验结果:3、回溯算法实验结果:七、实验分析: 1、“0-1”背包问题的贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选

11、择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。在本问题中,通过求出每件物品的单位效益来确定放入哪个物品,从而求出解。本题目第一件物品的单位效益为6,而第二件物品的单位效益为2,第三件物品的单位效益为4,按照升序排列,顺序为:1 3 2,有因为背包容量为2,所以,重量为1的第一件物品可以放入。由于第三件物品的重量为2,所以只能放入一半,背包的容量就满了,不能再放了。2、“0-1”背包问题的动态规划算法 动态规划过程是:每次决策依赖于当前状态,又随即引起状

12、态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。本题目中mij表示有i个物品,背包容量为j时的最优解,通过knapsack函数用来寻找最优解的值,自底向上地对每一个物品进行运算,都将把其放入与不放入背包两种情况下背包的总价值作=进行比较,然后选择中值较大

13、者作为当前状态下的最优值,最后求出最优值。在通过disp函数用来输出动态规划法中的二维矩阵。3、“0-1”背包问题的回溯算法 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 一般步骤为:(1)针对所给问题,定义问题的解空间;(2)确定易于搜索的解空间结构;(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。 本题目采用的是定长的解空间,从根结点出发,以深度优先方式搜索整个解空间。Backtrack函数用来进行深度搜索,程序用了指针的方法对左右子树进行搜索,当进入左子树的条件不满足时,就对其进行右子树搜索,如果还是不满足,就进行回溯。每次到达叶子结点时都是更新最优值,故最后求出来的解一定是最优解。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1