[互联网]ACM 搜索篇.pptVIP

  • 4
  • 0
  • 约6.35千字
  • 约 47页
  • 2018-02-13 发布于浙江
  • 举报
[互联网]ACM 搜索篇

搜索算法是利用计算机的高性能来有目的的穷举一个问题的部分或所有的可能情况,从而求出问题的解的一种方法。 搜索算法被称为“通用解题法”在算法和人工智能中占有重要地位 很多算法其实是搜索算法的拓展(如图论中的某些算法、动态规划、贪心等,只是他们找到了某些规律来进行变相剪枝而已)。;;状态和状态转移:状态(state)是对一个问题在某一时刻进展情况的数学描述,状态转移(state-transition)就是问题从一种状态到另一种(或几种)状态的操作 状态空间state space:搜索的过程其实是在遍历一个隐式图(请回忆数据结构中图的概念)它的结点是所有的状态,有向边对应状态转移,而搜索的一个可行解就是一条从起始结点出发到目标状态集中任一结点的路径!!;题目描述:某人要带一条狗、一只鸡、一箩米过河,但小船除需要人划外,最多只能载一物过河,而当人不在场时,狗要咬鸡、鸡要吃米。问此人应如何过河? 思考:如何建立状态及状态转移方程??;状态:建立四元空间(人,狗,鸡,米)。用0表示在左岸,1表示在右岸。 起始状态(0,0,0,0),终止状态(1,1,1,1) 状态转移规则: (a,b,c,d) →(1-a,1-b,c,d)(当a=b) →(1-a,b,1-c,d)(当a=c) →(1-a,b,c,1-d)(当a=d) →(1-a,b,c,d) 约束:(a,b,c,d)中,当a≠b时b≠c;当a≠c时c≠d;盲目搜索: 深度优先搜索depth first search(DFS) 广度优先搜索breadth first search(BFS) 纯随机搜索、重复式搜索、迭代加深搜索、 迭代加宽搜索、柱型搜索 启发式搜索: A*算法 IDA*算法 主要介绍前两种 ;算法描述:按照深度优先的顺序遍历状态空间,通常用递归或者栈来实现。 说白了就是往深里搜,当某个结点的所有子节点都搜索过了就返回父结点继续进行。 就像走迷宫,你没有办法用分身术来站在每个走过的位置。不撞南山不回头。;算法框架: Procedure DFS(State:Statetype;depth:integer) Begin for operand:=1 to operandcount(state) do begin NewState:=DoOperand(State,Operand); if answer then print else if depthmaxdepth then DFS(Newstate,depth+1); end; End.;问题描述:输入正整数t、n,然后是n个正整数(单调非递增)。若n个数中某几个数的和是t,输出这些加法表达式(表达式不重复输出) ;无解输出“NONE” ;状态:计算中间值r 转移规则: r →r-ai(取第i个数ai) →r (不取第i个数) 起始状态:所输入的t 中止状态:0 ;有一个字母序列,对它每个元素进行入栈、出栈操作。判断是否能得到指定输出序列,如果可以,输出相应的栈操作。;n个数排一圆环,要求相邻两个数和为素数。;练习: 八皇后问题 思考如何剪枝;因为大量的搜索状态空间可以看成一个树形结构,我们的任务就是探测每个叶子节点来获取信息,如果我们能在某个结点就将其所有子结点的可能性都排除我们就能减少搜索量!;算法描述:按照广度优先的顺序遍历状态空间,优先搜索当前结点的所有子结点,一般采用队列实现 就像你的眼镜掉在地上以后,你趴在地板上找。你总是先摸最接近你的地方,如果没有,再摸远一点的地方……;从某个顶点出发开始访问,被访问的顶点作相应的标记,并输出访问顶点号; 从被访问的顶点出发,依次搜索与该顶点有边的关联的所有未被访问的邻接点,并作相应的标记。 再依次根据上一步中所有被访问的邻接点,访问与这些邻接点相关的所有未被访问的邻接点,直到所有顶点被访问为止。;算法框架: Procedure BFS(initialstate:statetype); Begin enqueue(initialstate); while not emptyqueue do begin dequeue(state); for operand:=1 to operandcount(state) do

文档评论(0)

1亿VIP精品文档

相关文档