搜索
您的当前位置:首页正文

基于八数码游戏的两种搜索策略比较

来源:易榕旅网
S0FrWARE DEVEL0PMENT AND DESIGN 软件开发与设计 基于八数码游戏的两种搜索策略比较 俞露。许建华 (南京师范大学计算机科学与技术学院,南京2100o0) 摘要:利用状态空间法描述八数码问题,将其抽象成为一个从起始状态搜索到达目标状态的路径的问题,并在 Visual c++6.0环境下,用C++语言实现了其盲目搜索和启发式搜索算法。其中,盲目搜索采用的是宽度搜索和深度 搜索,启发式搜索策略采用的是有序搜索。通过比较两种搜索策略的时间复杂度和空间复杂度,在搜索步骤较多的 情况下,启发式搜索具有明显的优势,并在此结论的基础上分析了启发式搜索具有优势的原因。 关键词:八数码;搜索策略;盲目搜索;启发式搜索 Comparison of Two Search Strategies Based on Sudoku Game YU Lu,XU Jian-hua (Department of Computer Science and Technology,Sanjing Normal University,Sanjing,210000,China) Abstract:This paper uses state-space method to describe Sudoku problem which is abstracted as a search path problem from it"s initial state to it"S target state.In Visual C++6.0 environment.the blind search and heuristic search algorithms are realized using C++language.The blind search adopts the width search strategy and the depth search strategy.the heuristic search strategy adopts order search strategy.By comparing time complexity and space complexity of the two kinds of search strategies,in the complex case,heuristic search has obvious advantage.Also,this paper analyzes the sources of advantages based on tIle conclusion. Key words:Sudoku;search strategy;blind search;Heuristic search 八数码游戏(也称九宫格问题)是一个经典的智力小游 戏,即在一个3x3的棋盘里摆放着8个写着数字的棋子,留 下一个空位。与空位相邻的棋子可以滑动到空位中。玩家需 要移动棋子,让棋盘从初始状态达到目标状态。 (5)把n的所有后继节点放到OPEN表的末端,并提供 从这些后继节点回到n的指针。 (6)如果n的任一个后继节点是个目标节点,则找到一 个解(反向追踪得到从目标节点到起始节点的路径),成功退 1状态空间法表示 采用一维数组的方式存储每一步的状态,空位用0表示。 例如:某一时刻的状态为: 2 1 7 8 O 6 3 4 出,否则转向第②步。 —5 (二 =二) 用一个一维数组加以表示: int art【9】={2,8,3,l,0,4,7,6,5} 二 ==) 2八数码游戏的盲目搜索技术 2.1宽度优先搜索 以接近起始节点的程度依次扩展节点.先扩展出来的节 点随后优先被扩展(生成其所有的后继节点)。 2.1.1算法描述 如图1所示。 是一厂— 广] 、 -..............,./ (1)把起始节点放到OPEN表中f如果该起始节点为一目 标节点,则得到解)。 (2)如果OPEN为空表,则无解,失败退出,否则,继 续下一步。 图1 作者简介:俞露(1992一),女,本科,研究方向:嵌入式: 许建华(1964一),男,教授,研究方向:模式识别、神经 网络。 (3)把第一个节点(记作节点n)从OPEN表移出,并把 它放入CLOSED表中。 (4)扩展节点n,如果没有后继节点,则转向第②步。 收稿日期:2013—02—16 淼 电脑编程技巧与维护 2.2深度优先搜索 沿着一条路径进行下去,直到深度界限为止.每次扩展 的节点加到0PEN表的最前面。 2.2.1算法描述 (1)把起始节点S放到未扩展节点的OPEN表中(如果 此节点为一目标节点,则得到解)。 (2)如果OPEN为空表,则无解,失败退出。 (3)把第一个节点(记作节点n)从OPEN表移到CLOS ED表中。 (4)如果节点n的深度等于最大深度,转向②。 (5)扩展节点n,产生其全部后继节点,并把它们放人 OPEN表的前头。如果没有后继节点,则转向②。 (6)如果后继节点中有任一个节点为目标节点,则求得 一个解(反向追踪从目标节点到起始节点的路径),成功退 出;否则,转向②。 2_2.2算法流程图 如图2所示。 _弄 ] 目 是 二 ] 是 》一是一[ ] 把OPEN表中第一个节 点N移人CLOSE表中 是———<: 点N的深度是 扩展节点N.把它的后继 结点放人OPEN表的前 端.提供回到N的指针 戛售 蓦誊 为日标结点/ ~L是  二 图2 3八数码游戏的启发式搜索技术 利用启发信息来引导搜索,对待扩展的节点进行排序,选 择最有希望的节点加以扩展,即优先扩展估价函数值小的节点。 估价函数:f(n)=g(n)+h(n) f(n):表示节点n的估价函数值,是从起始节点通过节点 n到达目标结点的最小代价路径上的一个估算代价 g n):表示搜索树中节点n的深度 h fn1:节点n的状态与目标状态之间数码错位的个数 算法描述: (1)把起始节点S放到OPEN表中,计算f(S)。 (2)如果OPEN表是个空表,则无解,失败退出;否则 2013.10 电麓臁技巧 与壤 继续。 (3)从OPEN表中选择一个f值最小的节点作为代扩展节 点i。如果有几个节点同时最小,当其中有一个目标结点时,选 择此目标结点,否则就选择其中任一个节点作为带扩展节点i。 (4)把节点i从OPEN表中移出放入CLOSE表扩展节点 表中。 (5)如果n是目标节点,问题得解,退出。否则继续。 (6)扩展节点i,生成其全部后继节点。对于i的每一个 后继节点i。 1)计算f(i)。 2)如果i既不在OPEN表中,又不在CLOSED表中,则 用估价函数f把它加入OPEN表相应位置。从i加一个指向其 父辈节点i的指针,以便于反向追踪解的路径。 3)如果j已在OPEN表(处理与父节点的关系)或 CLOSED表(处理与父节点和子节点的关系)中,则比较新的 f(J)值和前面计算出来的f(j)值。如果新的f(j)值 较小.则 ①用新的值取代旧的值。 ②改变指针,从j指向i,删除原来的父辈节点指针。 ③如果节点j在CLOSED表中,则把它移回OPEN表 (意味着:扔掉原来的子节点)。 (7)转向②。 算法流程图如图3所示。 ~~~…~一一置……~…~~ 扩艟爷点t,得到后继节点 j,捉a 返 【的指引,利} fU)对OPEN丧簸新摊搿.鞫 整亲子戈系及指针 用供价函数f ̄'EjDri入 OPEN袭的榭麻俺臀 图3 4结语 步骤不多时,利用宽度搜索、深度搜索、有序搜索3种 搜索策略解决八数码问题,3种搜索算法的搜索的时间接近 0ms。在测试步骤较多的例子时(如搜索步骤为7时),可以 发现宽度搜索、深度搜索、启发式搜索的CPU耗时依次降低。 (下转第19页) SOFIWARE DEVELOPMENT AND DESIGN 软件开发与设计 易错字练习:学习者可以专门针对易错字进行练习,系 码的汉字笔画数据库支持中小学语文的汉字笔画教学,丰富 统会根据易错字的出错频率从高到低抽取练习,不仅可以抽 语文汉字笔画教学的资源,方便教师教学、学生学习以及纠 取学习者自己的易错字还可以抽取其他学习者的易错字。 正自己的汉字笔画书写的不良习惯,从而对我国汉字笔画书 试卷练习模块:系统随机抽取试卷,学习者在系统规定 写顺序的传承起到保护的作用。 时间内进行测试,交卷后系统自动评定成绩。成绩分为优秀、 参考文献 良好、中等、及格、不及格4个等级。数据库只记录练习过 [1】高更生.现行汉字规范问题【M1.北京商务印书馆, 程中的易错字不记录练习的成绩。 2006,10. 试卷测试模块:学习者测试后,数据库不只记录测试过 [2】林民,韩冬妹,宋柔.基于GDI+路径技术的汉字笔顺和 程中的易错字并且记录测试的成绩,可以用于汉字笔画书写 部件自动绘制[J】.计算机应用研究,2007,24(8): 顺序等级测试。 228-230. 4结语 [3】赵希武,吕生荣.小学汉字书写笔画顺序练习系统的设计 论述了基于计算机的汉字笔画顺序纠错模型的设计与实 [J】.内蒙古农业大学学报(自然科版),2010,31(1): 现.并面向应用设计了基于计算机模拟人的手写过程的汉字 236-240. 笔画顺序书写练习与纠错系统,可以在国家大政方针的指导 [4]王素坤,赵希武.计算机辅助汉字笔顺书写的研究[J】. 下 加强汉字书写的训练,为高校学生(特别是师范院校的 内蒙古师范大学学报(自然科版),2010,39(4):428— 学生)以及即将上岗的教师、 文秘、记者等进行岗前汉字书 432. 写的一项指标测试提供服务 。 同时通过建立基于笔画顺序编 (上接第16页) 表4 综合考虑时间和空间的复杂度,评价3种搜索算法的效 搜索步骤为7 0PEN表大小 C【DSED表大小 CPU耗时(ms) 率:宽度搜索<深度搜索<启发式搜索,其中启发式搜索具有 宽度搜索 72 95 10 很明显的优势。 深度搜索 4 129 2 表1 搜索步骤为1 0PEN表大小 CLOSED表大小 CPU耗时(ms) 有序搜索 11 1l O 宽度搜索 3 l 0 启发式搜索技术较盲目搜索技术具有优势的主要原因是 深度搜索 3 1 0 引入了启发信息,而启发信息在以下3个作用: 有序搜索 2 2 O (1)启发信息决定了要扩展的下一个节点,避免宽度优 表2 先或深度优先搜索中的盲目(人为规定)地选择扩展节点。 搜索步骤为4 OPEN表大小 CLOSED表大小 CPU耗时(m) (2)扩展一个节点的过程中,启发信息用于决定要生成 宽度搜索 l1 16 O 哪一个或哪几个后继节点,避免盲目地同时生成所有可能的 深度搜索 3 238 O 后继节点。 有序搜索 6 6 0 (3)启发信息决定了某些应该从搜索树中抛弃或修剪的 表3 节点。 搜索步骤为5 OPEN表大小 CLOSED表大小 CPU耗时(Ills) 参考文献 [11】 蔡自兴,徐光佑.人工智能及其应用[M】.北京:清华 宽度搜索 28 33 O 大学出版社.2011:33—94. 深度搜索 5 5 0 有序搜索 8 8 0 (上接第7页) 而探究构造函数的调用.有利于更进一步地理解类机制的运 程序运行的结果是:Basel S construtor,Base2 S constructor,De— 行过程。 irved S constructo 参考文献 3结语 [1】钱能.C++程序设计教程.2版.北京:清华大学出版社, 构造函数是C++类机制的重要组成部分,用来初始化对象 2005. 的数据成员,通过探究构造函数的一些作用。特别是默认构 【2】谭浩强.C++程序设计.北京:清华大学出版社,2004. 造函数、拷贝构造函数以及具有赋值和转型功能的构造函数 [3】余苏宁,王明福.C++程序设计.北京:高等教育出版社, 的一些作用,有利于在学习和编程过程中更好的运用类机制。 2003 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top