- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用贪心法求解船舶装卸问题
课题名称
用贪心法求解船舶装卸问题
二、课题内容和要求
设计要求:学习算法设计中贪心法的思想,设计算法编程解决如下现实问题:码头上有n艘船舶同时等待装卸,而码头每次只能装卸一艘船舶。船舶i需要装卸的时间为ti,1≤i≤n。应如何安排这n艘船舶的装卸次序才能使得总的等待时间达到最小?(总的等待时间是每艘船舶的等待时间的总和)
(1)给出求解此问题的贪心算法;
(2)说明你所给出的算法的时间复杂性。
三、需求分析概要设计4.算法流程图:
五、详细设计分析 1.设置NUM = 20,MAXTIME = 20
2.设置NUM = 20,MAXTIME = 10
3.设置NUM = 10,MAXTIME = 20
4.设置NUM = 10, MAXTIME = 10
七、调试过程中的问题
最初的想法很简单,既然每次都要找到卸货时间最短的船,那不如在程序开始之前,就把船的序号按照卸货时间的长短进行排序,这样一来只用遍历这个有序列表即可。后来在做的过程中发现这样并不是很简单,因为这样做只是在每次取值的时候变得简便,如果需要计算每艘船的等待时间和所有穿的等待时间之和的时候,还是会很费事,所以后来改用每次遍历等待船舶列表,取出最小值,同时顺带着就把其它船的等待时间加了上去,最后求总等待时间也很简单。
八、程序设总结
开始
初始化船舶信息,其中船舶卸货需要的时间tn为随机产生
for i in range(NUM):
boatWaitList.append(Boat(i,randint(1,MAXTIME),0))
i = 0
遍历NUM次boatWaitList,每次找出最小卸货时间,并添加到boatFinishList中。
然后删除此船舶信息,并把等待的船舶加上此船的卸货时间
for i in range(NUM):
temp = NUM + 1
minTime = MAXTIME
for j in range(len(boatWaitList)):
if boatWaitList[j].timeNeed minTime:
minTime = boatWaitList[j].timeNeed
temp = j
i NUM
YES
NO
遍历结束卸货列表boatFinishList,求出每艘船的等待时间和所有穿的总等待时间
for i in range(NUM):
timeSum += boatFinishList[i].timeWait
结束
文档评论(0)