积木搭建【信息技术】.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文档。上传文档
查看更多
积木搭建 问题描述 略 算法 这是一道典型的搜索题。虽然目标构形的规模不是很大(坐标范围7*7*7,体积范围50),但是考虑到处理对象是三维图形,情形比较复杂,在普通的搜索算法基础上加以优化方能取得比较理想的效果。 准备阶段 目标构形的“坐标有序化” 为了便于确定良好的搜索顺序,不妨先将目标构形的每个单位立方体进行排序。排序的标准定为:拥有较小X坐标的单位立方体较优先;X坐标相同者,拥有较小Y坐标的单位立方体较优先;X,Y坐标均相同者,拥有较小Z坐标者较优先。坐标有序化在对基本积木构形的姿态扩展时还会被提及,它的实现十分容易,对减少重复搜索有相当的作用(见后)。 积木“姿态”的扩展 由于积木在被使用来搭建目标时可以灵活地进行各种翻转动作,我们可以把同一种积木的不同角度的各种外观称为它的“姿态”。显然地,首先必须把所有姿态扩展出来,作为搜索的素材备用。 计算机对积木的认识无疑同我们的几何直观不一样,它处理数字化的积木。同一积木,从它的一种姿态的坐标序列得到另一种姿态的坐标序列,或者说要求出一个积木的所有不同姿态的坐标序列是一个比较复杂的过程。 研究积木的翻转,不外乎三种。它们分别是以X,Y,Z三个方向为转轴的旋转。 上图分别表示了三种旋转的方式以及旋转后坐标与原始坐标的关系。使用宽度扩展的方法,将原始形态作为队列的第一个元素,依次进行三种扩展。为了避免出现坐标为负的情况,不妨将取负值的那一维坐标都加上5。当然,出现负值问题也不大,因为在翻转结束后,要依次进行坐标值的最小化和上面提到的有序化这两个工作。所谓坐标值最小化就是保证该积木的单位正方体的所有坐标值中,X,Y,Z坐标的最小值均为1。 在坐标最小化和有序化之后,检查一下目前得到的积木姿态是不是一种未知的积木姿态,如果是的话,记录之并将其添加至队尾继续下一步的扩展。 在对所有积木进行扩展之后,发现共有105种不同的姿态。这个数字还是颇为可观的。下面就进行搜索过程。 搜索阶段 若不进行任何优化,一般搜索的初步思路就是:在目标构形中找到一个未被覆盖的单位立方体,将其作为某一个积木姿态中的某一个单位立方体,将该积木姿态试嵌入目标构形,看是否匹配。若匹配,则将其嵌入,并进行下一步搜索。若目标构形中的所有单位立方体均已被匹配,则说明找到可行解,若该可行解优于当前最优解,记录之。 上面的搜索过程是比较简单明了的。 考虑一下这种搜索方式的复杂程度:对于每一步搜索(表示嵌入一块积木的过程),首先要选择一个未覆盖单位立方体,然后要选择一种积木姿态,之后选定该单位立方体在积木中的位置(也就是给这个积木姿态定位),最后要判断这块积木在这个位置上能不能“放进去”……注意到,上文中每一次“选定”都意味着一重循环!重复的和无效的搜索无疑将占用大部分的时间。 减少重复搜索 基于在准备阶段中提到的,事先对目标构形和每一种积木姿态都进行了“坐标有序化”的工作。那么,在每一步搜索的过程中,只要按顺序找到第一块未被覆盖的单位立方体即可。进一步地,在选择积木的过程中,只要将该单位立方体作为当前选定的积木姿态的第一个单位立方体即可(因为积木姿态也是有序化的)。 减少无效搜索 所谓无效搜索可以认为是搜索过程中在一定程度上不可能得到最优解,或较优解,甚至是可行解也得不到的搜索工作。当然,可以认为凡得不到最优解的搜索都属于无效,但是如果能消除所有这种所谓的无效搜索的话,搜索也就不称之为搜索了。不过,我们能够也必须尽量地减少上述的无效搜索。 在这道题中,无效搜索突出地表现在两方面:一,当前已使用的积木数及剩余未覆盖的单位立方体数决定了当前搜索已不可能得到更优的解;二,当前正在被匹配的积木姿态即使在原始的目标构形中也不可能被嵌入目标构形。 第一个方面是显而易见的,只要在过程中加上一条判断就可达到较好的剪枝效果: if used+(left div 4)=mini then exit; 其中used表示已用的积木数,left表示剩余未覆盖的单位立方体数,mini表示当前最优解。 第二个方面则要求了搜索准备工作的完善性的提高。事先对目标的每一块单位立方体做如下的工作:检查在105中积木姿态中,有哪些是可以以当前的这个单位立方体为第一个单位立方体而被嵌入的,将它们全部记录下来。那么在搜索的过程中就可以随时取用,虽然仍须加以是否匹配的判断(因为有些单位立方体可能已被覆盖),但考虑范围已大大缩小。 数据结构 type coord_type=record {单位立方体坐标} x,y,z:byte; end; block_type=array[1..4] of coord_type;

文档评论(0)

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

1亿VIP精品文档

相关文档