动态规划实验报告_第1页
动态规划实验报告_第2页
动态规划实验报告_第3页
动态规划实验报告_第4页
动态规划实验报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告题目实验一 动态规划开课实验室:数学实验室 指导老师:韩逢庆 时间:2011.12学院:理学院 专业:信息与计算科学 班级:2009级2班姓名:古月 学号:09180230一、 实验目的 1加深学生对动态规划算法设计方法的基本思想、基本步骤、基本方法的理解与掌握; 2提高学生利用课堂所学知识解决实际问题的能力; 3提高学生综合应用所学知识解决实际问题的能力。二、 实验内容 题目见P102:3-3,3-12,3-15,3-19,3-21,3-23。三、 实验要求(1)动态规划法求解独立任务最优调度问题,三维01背包问题,游艇最少租金问题; (2 )再选择自己熟悉的其它方法求解本问题; (3)上机实现所设计的所有算法;四、 实验过程设计(算法设计过程)(1) 独立任务最优调度问题实验题目:用2台处理机A和B处理n个作业。设第i个作业交给机器A处理需要时间。由机器B来处理,则需要时间。由于各作业的特点和机器的性能关系,很可能对于某些问题i,有,而对于某些问题j,。既不能将一个作业分开由两台机器处理,也没有一台机器能同时处理2个作业。设计一个动态规划算法,使得这两台及其处理完这n个作业的时间最短(从任何一台季芹开工到最后一台机器停工的总时间)。研究一个实例; 。过程设计:这个实验就是求解在一定任务的数量,和一定的工作机器下面求解用这些处理机完成所有这些任务最少的时间。在分析题目以后,认识到动态规划问题能够很好的解决它。采用自底向上的方式,首先我们可以选择两台处理机同时处理开动,完成最后一个任务。其实这时候只要选择处理机A或者处理机B两台处理机中完成的任务N时间较少的那一个。这里只需要一次比较,记录处理机A完成任务N的时间和处理机B完成任务N的时间中的较小的一个。在进行第二步的时候,把问题处理的个数有原来的第N个变成现在的第N个和第N-1个。然后分别比较两种情况,也就是处理机A处理任务N,同时并行处理机B处理任务N-1的时间,或者是处理机A处理任务N-1,同时并行处理机B处理任务N的时间,从中我们选择较小的一个记录为第二层处理的时间。然后以此类推,可以得到用动态规划算法处理这个问题的基本表达式为:其中的是从任务K到任务N最少完成时间,为处理机A完成第K个任务时间,为处理机B完成第K个任务需要时间。在程序的执行过程中,只要调用一次就可以算出这个问题的最优解。在执行过程中,选择的随机输入的形式,增强了文件的可移植性。(2) 三维01背包问题实验题目给定n种物品和一背包,物品t的重量是w,体积是b,价值是v,背包的容量为C,容积为D,问:应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大?在选择装入背包中的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品装入背包多次,也不能只装入部分的物品i。试设计一个解决此问题的动态规划算法,并分析算法的计算复杂性。过程分析此问题的形式描述为:给定,要求找出N元0-1向量,使得,而且使得达到最大。因此,0-1背包问题是一个特殊的整数规划问题。可以建立以下递归关系:的最优值为,即是背包容量为j,可乘重为k,可选择的物品为时的背包问题的最优值。由0-1背包问题的最有子结构性质,可以建立如下计算的递归式为:(3) 游艇最少租金问题实验题目:长江游艇俱乐部在长江上设置了n个游艇出租站1,2,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为,设计一个算法,计算出从游艇出租站1到游艇出租站n所需的最少租金。过程分析在这个题目中,首先我们想到的就是如何使得当游客从第一个游艇出租站到最后一个游艇出租站的总共所用的租金最少的问题。在这个问题总,采用动态规划自底向上的方式,不断的加入游艇出租站的个数,分别别算出此时的费用为,然后与当前的最少费用相比较,不断的更新,这样既可求得最优解。这里附上动态规划算法的核心算法为:void dyna()for(int k=2;kn;k+)for(int i=0;in;i+)int j=i+k;for(int p=i+1;ptemp)fij=temp;五、 实验结果分析(1) 独立任务最优调度问题 (分析时空复杂性,设计测试用例及测试结果)时间复杂性:最好情况下,算法的时间复杂性为。最坏情况下,算法的时间复杂性为。空间复杂性分析:,算法的空间复杂性为(2) 三维01背包问题(分析时空复杂性,设计测试用例及测试结果)时间复杂性:该算法的时间复杂性为空间复杂性分析:该算法的空间复杂度为(3) 游艇的最少租金问题(分析时空复杂性,设计测试用例及测试结果)时间复杂性:该算法的时间复杂性为:空间复杂性分析:该算法的空间复杂性为:六、 实验体会 通过本次实验加深了我对动态规划算法的理解。而且对动态规范编写代码解决一个实际问题有了进一步的认识。即当算法考虑的原问题的每一个子问题,算法都需要计算一个最优解。换句话说,所有算法生成的表项表示算法考虑的子问题的最优解。这时候用动态规范把每一个最优解求出来(利用递归公式),就能够保证最后求得的一定是最优解。而且动态规划有个特点,即它是由底向上,它实现起来就是利用循环,有时用到一层循环即可,有时要用到两层for循环即可以求解出问题。但是在设计程序的出口的时候,设计程序发生异常情况的时候,都应该编写出相应的边际条件然后给予说明,才能使得程序更加的完备。在采用动态规划问题的时候,我们需要了解的核心问题就是找出问题的最优子结构,然后采用自底向上的方式构造出最优解。七、 附录:(源代码)(1)独立任务最优调度问题具体算法实现如下:#include #include /using namespace std;int n,mn,opt;int *p;int* a;int* b;void dyna()/动态规划法求解int i,j,k;for(i=0;i=mn;i+)for(j=0;j=mn;j+)for(k=1;k=0)pijk=pi-ak-1jk-1;if(j-bk-1=0) pijk=(pijk|pij-bk-1k-1);for(i=0,opt=mn;i=mn;i+)for(j=0;jj)?i:j;if(tempopt) opt = temp;void main()int m;cout请输入你要处理的任务的个数endl;cout请输入每一个任务在处理机A上需要处理的时间endl;cout请输入每一个任务在处理机B上需要处理的时间endl;scanf(%d,&n);/作业个数a = new intn; b = new intn;for(int i=0;im) m = ai;for(i=0;im)m = bi;mn = m*n; p = new int* mn+1;/动态分配内存并为三维数组赋值for(i=0;imn+1;i+)pi = new int*mn+1;for(int j=0;jmn+1;j+)pij = new intn+1;for(int k=0;kn+1;k+) if(k=0) pijk=1;if(k!=0) pijk=0;dyna();cout采用动态规划算法处理这些业务的最短时间为endl;printf(%dn,opt);(2)三维0-1背包问题具体算法实现如下:#include#include#include int min(int a,int b)if(a=b)return b;elsereturn a;int max(int a,int b)if(a=b)return b;elsereturn a;void main()int c,d,n,w20,b20,v20,best,i,j,r,N,x20;cout请输入背包能承受的最大重量(整数):c;cout请输入背包能容纳的最大体积(整数):d;cout请输入物品的数量:N;cout请依次输入这N个物品的重量:endl;for(i=0;iwi;cout请依次输入这N个物品的体积:endl;for(i=0;ibi;cout请依次输入这N个物品的价值:endl;for(i=0;ivi;n=N-1;int m202020;memset(m,0,sizeof(m);int jMax=min(wn-1,c);int rMax=min(bn-1,d);for(j=0;j=jMax;j+)for(r=0;r=rMax;r+)mnjr=0;for(j=wn;j=c;j+)for(r=bn;r=0;i-)jMax=min(wi-1,c);rMax=min(bi-1,d);for(j=0;j=jMax;j+)for(r=0;r=rMax;r+)mijr=mi+1jr;for(j=wi;j=c;j+)for(r=bi;r=d;r+)mijr=max(mi+1jr,mi+1j-wir-bi+vi);for(i=0;in;i+)if(micd=mi+1cd) xi=0;elsexi=1;c-=wi;d-=bi;xn=(mncd) ? 1 : 0;cout应选择装入的物品为:endl; for(i=0;i=n;i+)if(xi=1)cout第i+1个物品,endl;cout背包能容纳物品的最大价值为:endl;coutm0cdendl;(3)游艇的最少租金问题具体算法实现如下:#include#define N 200int fNN;int n;void init()int i,j;for(i=0;in;i+)for(j=0;jn;j+)fij=0;cout请输入每两站之间的租金endl;f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论