试验三贪心算法的应用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
试验三贪心算法的应用

实验三:贪心算法的应用 吴博 实验描述 集装箱的装箱问题 给定一个集装箱,其长为L,宽为W和高为H,现有一批圆柱形木材,每根木材的长均为L,但是半径不同,设第i根木材半径为ri。问如何装箱,使得集装箱的空间利用率最高? 程序设计 任给一个输入实例,能输出集装箱的空间利用率 能用图形演示装箱的过程 实验思路. 1.首先,使用贪心法对这批圆柱形的木材按照它们的半径从大到小进行排序 2.将圆柱体填入集装箱中. i)先要算出圆柱体应该放在哪个位置. 按照张德富老师课堂上讲的是,放在离已经放到集装箱中的圆柱的圆心长度为r的圆弧带里. 张老师用的是两个圆弧带之间的交点,我的算法有点不大一样,我只是使用一个圆弧带来产生坐标void Generate(int i,int j,int k,int pid),然后判断每个坐标是否合法int CheckOK(int pid,int i). ii)按照上面的做法,我的算法将产生一系列合法的坐标,然后我再从这些合法的坐标里面选出靠左下角的点,把圆柱体放到该点上去即可. 实验心得. 在实验室做的时候,我一直陷入张德富老师所讲的用两个圆来求第三个圆的位置, 后来问助教老师,助教老师讲的是采用正方体来代替圆,这个方法也蛮不错的. 最后,回到宿舍想了很久,才明白,张老师的意思是从整个圆弧带里面找出合法的坐标填进去就可以了. 在写CheckOK()函数即判断产生的坐标是否合法的函数过程中,也出现了不少的问题. 例如: if(x11+r[i])w+0.00001) 这里头是需要在后面加入一个0.00001,因为两个浮点数之间比较大小,很容易出现舍入误差,这一点是非常重要的. 其实在实际放置木材的过程中,也是要考虑到一些误差问题的,制作出来的木材不可能是标准的圆柱体,往往是有偏差的.实际设计软件的时候,这一点是必须要考虑到的. 据说张老师好像在做开发切割包装系统以及股票预测系统 for(start=1;start=n;start++){ if(r[start]*2+0.0001wr[start]*2+0.0001h){ pos[start][0]=r[start]; pos[start][1]=r[start]; visited[start]=1; break; } } 有关参数SETN的说明: #define SETN 360 //这个用来设置放木材的精度,为整型,理论上值越大,空间利用率越高,最大值最好不要超过360 SETN用来表示搜索的坐标的精度数,越大精度越高, double arcCompute=3.1415926*2/SETN; 这个arcCompute是用来产生坐标的间隔. 也就是说:SETN越大,分的角度就越小,结果就越好. SETN设置小于10和大于100的空间利用率差别是比较大的,大概会差10个百分点左右. 5. sort函数的简单说明: 在程序中我使用了:sort(r+1,r+n+1,cmp); 或许你会觉得奇怪,这个函数的具体定义怎么没有在程序中出现呢. 它是包含在头文件#includealgorithm 四.实验结果. C20.txt C25.txt C30.txt C35.txt 算法时间复杂度. O(SETN*n*n) 其中SETN是空间利用率的精度,这在前文已经说明过了. 附Java源代码 import java.awt.*; import java.applet.*; import java.awt.event.*; import java.math.*; public class expr3 extends Applet{ int i,n=45; int SETN=30; //这个用于设置图形的大小 String s=new String(123456788); double x[]={ 2.178,6.522,10.629,14.514,18.373,22.180,20.325,16.476,12.609,8.938,4.396,1.505,6.758,22.851,10.679,14.395,18.248,3.658,20.616,1.276,8.553,16.224,12.583,5.600,0,0,23.282,23.326,10.558,14.397,18.758,3.023,0,6.764,0}; double y[]={ 2.178,2.178,1.963,1.963,1.963,1.896,5.211,5.121,5.012,5.014,5.214,6.153,7.120,7.407,7.483,7.514,7.748,7.971,9.031,8.981,9.2

文档评论(0)

sunshaoying + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档