优先搜索应用讲解.ppt

  1. 1、本文档共111页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
万能的解题金钥匙——搜索;基础概念;广度优先搜索;例题一;分析;分析;分析;分析;程序实现(伪代码);总结与拓展;产生规则也必须作相应改动。设空格当前位置是SI,则有: (1)空格向上移动:空格的位置减3,即交换SI和SI-3的字符; (2)空格向左移动:空格的位置减1,即交换SI和SI-1的字符; (3)空格向右移动:空格的位置加1,即交换SI和SI+1的字符; (4)空格向下移动:空格的位置加3,即交换SI和SI+3的字符。 如设规则编号为k,则上述四条规则可归纳为一条: 交换SI和SI+(2*k-5)的字符 布局用字符串表示,使得判断重复过程和判断目标的过程变得很简单,只需判断两个字符串是否相等就可以了。按照上述的改进,读者可自己编制的解八数码问题的程序。 ;一般广度优先搜索的基本框架;例题二;分析;分析;分析;例题三;例题三;分析;分析;分析;分析;例题四;分析;分析;例题五;分析;受多维数组元素地址的计算方法的启发,可以将矩阵的每一种状态按以下规则对应于一个双字节的整数K: (1)用一维数组S[1..8]表示一种状态。例如初始状态S[i]=i; (2)令T[i]表示S[1..i-1]这i-1个数中,比S[i]小的数的个数; (3) ;可以证明0—40319之间的每一个整数都唯一的对应了一个T数列,也就是说,魔板的每一个状态都与每一个整数一一对应。 ∵n!=(n-1)*(n-1)!+(n-1)! ∴n!=(n-1)*(n-1)!+(n-2)*(n-2)!+(n-3)*(n-3)!+……+2*2!+1*1!+1 n!-1=(n-1)*(n-1)!+(n-2)*(n-2)!+(n-3)*(n-3)!+……+2*2!+1*1! 这一式子类似于10k-1=9*10k-1+9*10k-2+……+9*100,对于上面的结论就很容易证明了。 ;因此可以用一个0—40319的布尔型映射数组,初始状态为假。如果一种状态已经搜索到,则将其对应的数组元素标记为真。判断一种状态是否与以前的状态重复的时候,只需要检查该状态所对应的数组元素,若为真则该状态一定已经搜索到了。这样省略了查找工作的时间量,虽然多花了40k的空间,却大大提高了时间效率。 在广度搜索当中,扩张出来的新的节点总是有很大的重复,必须对这些节点进行判重操作,最简单判重方法是相当耗时的,它需要将新的节点与已经生成的节点分别进行比较,在搜索的初期阶段,这一步的耗时是不明显的,但随着节点数目增大,判重的耗时相对就大大增加,从而降低了算法的时间效率。为了省去这一个判重工作,往往是利用数据结构当中的哈希表。 源程序见目录下exchange.pas;哈希表的缺点;例题六;例题六;分析;分析;分析;深度优先搜索;例题一;分析;行:因为枚举是按行的,一行只有一颗棋子,所以不必判断。 列:可以用一个b[1..4]的布尔数组记录,当b[i]=true时表示第i列还没有棋子,否则已有棋子。 对角线:如图每个格子所在的对角线有两条,4*4的棋盘分别有7条斜向上和斜向下的对角线,可用两个布尔数组c,d[1..7]判断。;算法分析: 首先我们枚举第一行的棋子的列坐标I,选定一个后,把A[1]赋值为I,把它所在的列(I)、所在的两条对角线(I,I+3)的数组元素赋值为false,再搜索第二行,如此递归搜索直到第四行棋子的列坐标确定,输出。源程序如下:;源程序;一般深度优先搜索的基本框架;例题二;分析;分析;伪代码; 生日蛋糕 条件1:V = nπ H = m 层 形状:每层都是一个圆柱体。 条件2: 设从下往上数第i(1=i=m)层蛋糕是半径为Ri, 高度为Hi的圆柱。 当im时,要求RiRi+1且HiHi+1。 条件3: 表面积Q最小,令Q= Sπ 问题: 给出的n和m, 找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。 (除Q外,以上所有数据皆为正整数) 输入 n (n=10000), m (m=20) 输出 S(若无解则S=0)。;解析法? ;转变思路,搜索?;确定第一层蛋糕的大小 根据上一层蛋糕的大小确定下一层蛋糕该怎么做 看是否符合条件 1)是否做到了m层 2)是否最终体积为0 3)是否当前面积最小 若上述条件成立,则保留当前最优值,否则继续做下一层蛋糕,若重做蛋糕 ;Search (i, Ri , Hi , Si , Vi) {对每层蛋糕进行搜索} if (i=m) and (Vi =0) then 更新最优值

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档