圆排列问题.pptVIP

  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文档。上传文档
查看更多
圆排列问题.ppt

圆排列问题 陈楣 040320131 问题描述: 给定n个大小不等的圆c1,c2,…,cn,现要将这n个圆排进一个矩形框中,且要求各圆与矩形框的底边相切。圆排列问题要求从n个圆的所有排列中找出有最小长度的圆排列。例如,当n=3,且所给的3 个圆的半径分别为1,1,2时,这3个圆的最小长度的圆排列如图所示。其最小长度为 编程任务: 对于给定的n个圆,设计一个优先队列式分支限界法,计算n个圆的最佳排列方案,使其长度达到最小。 评分: 如果没有按照题目要求用分支限界法解题,则所得分数减半。 解题思路: 由于我们要从n个圆的所有排列中找出最小长度的圆排列,所以圆排列问题的解空间是一棵排列树。用分支限界法实现。 剪枝策略一: 像1,2,…,n-1,n和n,n-1,…,2,1这种互为镜像的排列具有相同的圆排列长度,只计算一次就可以了。不妨设n=3,所有的排列为 123 132 213 231 312 321 只要算其中的{123 132 213}这一半组合就可以。 剪枝策略二: 如果所给的n个圆中有k个圆的相同的半径,则这k个圆产生的k!个完全相同的圆排列,只要计算一个就可以了。 算法实现:扩展当前活结点的所有儿子结点时,对于半径相等的那些儿子结点只扩展其中的一个。 剪枝策略三: 在扩展结点时,将导致非最优解的结点舍弃。 k:算法完成第k步,已经选择了第1--k个圆 rk:第k个圆的半径(程序中为r[rp[k]]) dk:第k-1个圆到第k个圆的圆心距离(x轴方向的) dk=2*sqrt(rk-1*rk) xk:第k个圆的圆心坐标,设x1=0 lk:第1-第k个圆的排列长度 Lk:放好1--k个圆以后,相应的代价函数值 Lk=ln best:当前最优的圆的排列长度 Lk=xk+dk+1+dk+2+…+dn+rn+r1 =xk+2(n-k)r+r+r1 r为排好k个圆后,待排的n-k个圆中最小圆的半径。 if((xk+2(n-k)r+r+r1)=best) 该结点舍弃。 空间上的改进: 算法完成第n-2步的时候,也就是活结点已排好n-2个圆的时候,不继续扩展儿子结点,直接算圆排长度。使空间复杂度由原先的o(n!)降到o((n-2)!). * * *

文档评论(0)

倾国倾城 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档