分治技术在典型问题中的应用.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分治技术在典型问题中的应用   摘要:利用分治技术解决马跳棋盘问题,将传统回溯法的时间复杂度由O(7n*m)降低到O(n*m),可解大规模的马踏棋盘问题。   关键词:分治;回溯法;马踏棋盘   中图分类号:TP751文献标识码:A文章编号:1009-3044(2010)13-3476-01   Application of Divide and Conquer in the Typical Problems   HU Ying-jian,ZHANG Yan   (Computer Office, Aviation University of Air Force, Changchun 130022, China)   Abstract: Using divide and cinquer technology to solve the horse riding board problem The technology makes the time complexity to the traditional Backtracking to be debased from O(7n*m) to O(n*m) and can solve an extensive Horse riding board problem.   Key words: Divide and Cinquer; Backtracking; Horse riding board   1 概述   马踏棋盘问题是在一个m×n的中国象棋棋盘,有一棋子,从任一点开始,按照中国象棋跳马的规则遍历棋盘上所有位置。传统的解决方法为简单的回溯法,平均时间代价较小,但可解的问题规模很小。本文采用分治技术结合回溯法,将算法的时间复杂度降低,实验表明,这种方法可以解决大规模的马踏棋盘问题。   2 问题分析   用回溯法解决此此问题的最小时间代价为O(n*m),最大代价为O(7n*m),最大时间代价是指数的,当n*m较大时,使用此办法求解很困难。对该问题使用分治技术,将大的矩阵划分为小块,分别求解,将大大降低时间代价。实际上,我们只需要搜索出一个小块的所有可能的出口,在其他块上进行复制,时间代价将进一步降低。划分的过程中有三个重要问题:   1) 划分以后要保证每一块都能遍历,且遍历一块以后能跳到下一块;   由于棋盘一般不能完全划分为指定大小的块(简称标准块),因此,为减少边角上块的种类,标准块应尽可能小,并且最好是对称的。通过试验,5×5的块是满足条件的最小块。   2) 矩阵一般不是小块的整数倍,会有一些不规则的边块;   处理边角要注意:边角块不能小于5×5,否则可能不能遍历边角块,或遍历后不能跳入其他块。尽量减小最大块的规模,如果存在M×8或M×9的块,应与邻块合并后重新划分为M×6和M×7的块。   这样处理后,存在的块的种类有5×5、5×6、5×7、6×6、6×7、7×7等六种。观察这几种块的入口和出口发现,如果入口坐标为(0,0)和(1,0),可以跳到下一块的(0,0)和(1,0)上的可能性较大,所以划分块时就要考虑尽可能使起始点在坐标(0,0)和(1,0)上。   3) 块访问顺序   划分以后,对块的访问顺序实际是个Hamiltonian路径问题,时间代价为O(C*R)。   3 算法分析   输入参数:棋盘宽度W,棋盘高度H,起始坐标(X,Y)   3.1 分块   1) 若起始点到棋盘两边的距离均小于5,即它在角上的块内,如图1所示。   2) 这时主要是决定将角上的块分为5×5还是6×6,使得从该点出发遍历该块以后能进入下一块的(0,0)位置。图中给出几个例子,其他的点类似。   3) 若起始点不在棋盘角上的块内,这时的划分相对复杂,可以把当前块划分为5×5或6×6,改变该块周边块的大小,使起始点成为新块中恰当的点,5×5块的(0,0)点,6×6块的(1,1)、(2,2)、(0,2)点,试验证明,这些改变都不会使周围的块大小超过7×7。   3.2 确定遍历块的顺序   前面提到这是一个Hamiltonian路径问题,继续将图分块如图2,图3所示。   块1:若块2遍历完成后从块1的左下角进入块1,按列顺序遍历块1。有一种情况在图中没有表示出来,若块1有奇数行,可以按行顺序遍历块1,以便从块3的角上进入块3,简化块3的遍历。   块2:先向下走到最下面的节点,剩余部分若是奇数列就按列遍历,若是偶数列就按行遍历。按行遍历时若有偶数行,则不能从块1的左下角进入块1,图中未表示出。   块3:若遍历块1后从块3的角上进入块3,则按行或按列遍历块3都可以。若未从块3的角上进入块3,则有两种情况。若块3有偶数列

文档评论(0)

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

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

版权声明书
用户编号:5243141323000000

1亿VIP精品文档

相关文档