网站大量收购闲置独家精品文档,联系QQ:2885784924

N 皇后问题随机算法性能分析.docVIP

  1. 1、本文档共11页,可阅读全部内容。
  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文档。上传文档
查看更多
N 皇后问题随机算法性能分析.doc

N 皇后问题随机算法性能分析   摘要:N皇后问题是NP问题,以随机算法结合回溯求解该问题,能获得很好性能。算法性能与随机皇后数量的关系曲线呈U型。随机皇后数量须在宽度不大于20的特定范围内才能获得较好性能。100以内随n变大,最佳随机皇后数量从n-10到n-17缓慢变化。最佳随机皇后数量使算法能在常规时间内求解n100的情况,远大于单纯回溯法求解规模30。由于回溯开销,提高随机算法性能的做法不能有效降低总用时。算法用时随n值递增的速度不断趋缓。   关键词: N皇后;随机算法;拉斯维加斯算法;时间复杂度;回溯;随机窗口   中图分类号:TP312 文献标识码:A 文章编号:1009-3044(2013)26-5954-04   在n*n棋盘上放置n个皇后,使其不得相互攻击。不相互攻击的等价描述是任意2个皇后不得处于同一列、同一行或同一斜线。   n皇后问题原型是19世纪高斯提出的8皇后问题。首先该问题是判定问题,其次可以在多项式时间内猜测一个答案,并验证该答案是否正确,所以n皇后问题属于NP问题[1]。现在还不能证明NP问题存在多项式时间算法。利用回溯法求解该问题,其时间复杂度是指数型的。有人利用并行方式求解以图加速,文献[2]利用计算机的位并行处理能力采用位运算解决n皇后问题,能将性能提高1到2个数量级,具体的效果取决于计算机的字长。文献[3]利用多核技术求解。也有学者采用Q_矩阵LDPC编码技术,其局限性在于需要先找到一个解才能生成其他解[4]。还有一些学者采取人工智能方法求解。文献[5]使用遗传算法,文献[6]采用启发式规则结合回溯的方法,在绝大多数情况下只需很少量回溯就能求解,速度很快。缺点是少数情况需极大量的回溯,甚至可能找不到解,文献[7]使用神经网络等人工智能技术解决该问题,在n值很大时,性能近似于多项式型。其中一些算法如遗传算法带有一定的随机性质,取得了较好性能,但是还没有揭示随机程度与性能之间的量化关系。该文分析随机算法求解n皇后问题的最佳性能,揭示随机皇后数量对算法性能的影响的规律,对将来新算法的设计有指导意义。   1 回溯法求解   约定第i个皇后放在棋盘第i行。回溯法从空棋盘开始,将第一个皇后放在允许的第1个位置,即第1行第1列,再放置第二个皇后至允许的第1个位置,即第2行第3列。这样依次放置下去。若第k个皇后找不到合适位置,说明其前面的皇后位置不合理,将第k-1个皇后的位置移至其允许的下一个位置后再考虑第k个皇后。若第k-1个皇后也无下一合适位置,则应继续向前调整第k-2个皇后。如此调整下去直至所有皇后都能找到合适位置。像这样,当前皇后标号回退的现象称为回溯。   回溯法实为穷举法,性能不好。每个皇后寻找其合适位置应考查所在行的n个格。n个皇后在各个位置上的组合范围为O(n[n]),时间复杂度属于指数级别。虽然剪枝和对称翻转等技术可加快回溯法对解空间的搜索,但是剩余的搜索空间仍然很大。   2 随机法求解   拉斯维加斯型随机算法不时做出随机的选择[8],并检测算法是否陷入僵局,如果是就承认失败,再进行下一次尝试,直至成功。拉斯维加斯型算法的随机性质能显著加速算法。   对n皇后问题使用拉斯维加斯型随机算法,先往棋盘上随机放置m个皇后(0 [≤] m [≤] n),再以回溯法求解剩下皇后的位置。放置随机皇后失败和回溯失败都会导致算法失败,从而引发算法的再次调用。m=0时算法退化成纯粹的回溯法。   算法利用标号数组判断皇后能否放在某位置。n皇后问题的可能解用数组int[] X记录。以数组int[] row记录各行是否已有皇后,1为有,0则无。以int[] col 记录各列是否已有皇后。int[] slash_right和int[] slash_left分别记录斜率为1和-1的各斜线上是否有皇后。判断某位置能否放皇后只需检查上述数组中的相关元素是否为0即可。   n*n棋盘随机放置m个皇后:   int t = 0; // 随机布局不当会死局,用t限定其尝试次数为Max次   for (int j = 0 ; j m t Max; t++;) {   int a = rd.Next( 0, n ); // rd.Next求一个随机数   int b = rd.Next( 0, n );   if (row[a] == 1 || col[b] == 1 || slash_right[a + b] == 1 || slash_left[b - a + n - 1] == 1) ; //冲突   else { //放置皇后,设置各标志   row[a] = 1; col[b] = 1; slash_right[a + b] = 1; slash_left[b -

文档评论(0)

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

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

1亿VIP精品文档

相关文档