搜索基本算法2012.8.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文档。上传文档
查看更多
搜索基本算法2012.8

搜索基本算法 搜索是人工智能中的一种基本方法,利用计算机的高性能来有目的、有方法的穷举一个问题的部分或所有的可能情况,从而求出问题的解的一种方法。在建立搜索算法时,首先需要关注的问题是,以什么作为状态?这些状态之间又有什么样的关系?其实,在这样的思考过程中,我们已经不知不觉地将一个具体的问题抽象成了一个图论的模型——树(如图所示)。即搜索算法的使用第一步在于搜索树的建立。 由上图可以知道,这样形成的一棵树叫搜索树(图)。初始状态对应着根结点,目标状态对应着目标结点。排在前的结点叫父结点,其后的结点叫子结点,同一层中的结点是兄弟结点,由父结点产生子结点叫扩展。完成搜索的过程就是找到一条从根结点到目标结点的路径,找出一个最优的解。这种搜索算法的实现类似于图或树的遍历,通常可以有两种不同的实现方法:深度优先搜索(DFS——Depth First search)和宽度优先搜索(BFS——First Search),下文对这两种方法分别进行讨论。 深度优先搜索 一.深度搜索 如算法名称那样,深度优先搜索所遵循的搜索策略是尽可能“深”地搜索树。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前(子结点)探索,在探索过程中,一旦发现原来的选择不符合要求,就回溯至父亲结点重新选择另一结点,继续向前探索,如此反复进行,直至求得最优解。如迷宫问题(可以理解为遍历图的问题):进入迷宫后,先随意选择一个前进方向,一步步向前试探前进,如果碰到死胡同,说明前进方向已无路可走,这时,回到上一步,改变前进方向是否有路可走,如果有路可走,则沿该方向再向前试探;如果已无路可走,则再返回一步,再看其它方向是否还有路可走;如果有路可走,则沿该方向再向前试探。按此原则不断搜索回溯再搜索,直到找到新的出路或从原路返回入口处无解为止。 深度优先搜索在树(图)的遍历中也称作树(图)的先序遍历。对于树而言,深度优先搜索的思路可以描述为: 将根结点置为出发结点。 访问该出发结点。 依次将出发结点的子结点置为新的出发结点,进行深度优先遍历回溯(执行(2))。 回溯上一层的出发结点。 深度优先搜索的具体编程可用递归过程或模拟梯归来实现。他们各有各有优缺点。通常情况下采用递归方式实现搜索算法,因为递归形式的程序符合思维习惯,编写起来较容易。下面是深度优先搜索的用递归方式实现的程序框架: Procedure dfs(i:integer); Var k:integer; Begin If 所有阶段都已求解 then Begin 比较最优解并保存; end else begin for k:=1 to i(同一深度可能决策的范围)do begin 穷举当前阶段所有可能的决策(方案、结点)k if k方案可行 then begin 记录状态变化; DFS(i+1); // 将子结点作为新的出发结点 状态恢复(现场恢复); end end; end; End. 二.例 题 1. 选择最短路径 【问题描述】 有如下所示的交通路线图,边上数值表示该道路的长度,现要求出从1号地点到达7号地点的最短的路径长度是多少,并输出该长度。 图1 图2 【问题分析】 首先需要把图1转化成搜索树模式。在建立搜索树之前,各节点之间的状态,结点与结点之间的关系。 结点状态:现有结点①~⑦号,每个结点存在两种状态,即已进入搜素路径或者未进入搜素路径,初始状态都是未进入搜索路径,两种状态可以用“1”和“0”表示。 结点之间关系:存在路劲或者不存在路径。存在路径有具体的数值表示,不存在路径可以用“-1”来代替。 在明确以上两点的基础上建立如图2所示的搜索树。求最短路径就是遍历该搜索树的过程。 首先从①号结点开始,在遍历①~⑦过程中,搜索到与结点②时存在路径,首先把结点②纳入路径,然后累加路径的长度同时判断该结点是否为结点⑦。继续调用以②为起点的搜索,开始继续遍历①~⑦中的结点,发现结点①、②已在路径中,结点③不存在连接,判断与结点④的连接,存在连接,同样把结点④纳入路径,累加路径的长度,同时判断该结点是否为结点⑦,……依次类推,形成一颗搜索树,一条完整的搜索路径:①-②-④-③-⑤-⑦。 完成第一条路径的搜索以后,即完成了第5层面的搜素,但是前面的4个层面还没有完成,这时回溯至第4层完成结点⑥和结点⑦的搜索,不存在连接,继续回溯至第3层,遍历至结点⑤,遍历结点①~⑦,发现结点①、结点②已经存在路径中,与结点③存在连接,同样把结点③纳入路径,累加路径的长度,同时判断该结点是否为结点⑦,然后以结点③为起点,遍历搜索结点①~⑦,发现无连接,这样宣布这条路

文档评论(0)

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

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

1亿VIP精品文档

相关文档