图搜索算法

来源:互联网 发布:微信数据库 编辑:程序博客网 时间:2024/06/16 10:04

从起始状态,经过一系列的转移(或者说操作),达到最终状态。

图搜索解决思路\模型:

  1. 记住前一步。当你走到新的一步的时候,要记得你是从哪走过来的,要不然等你走到了B点,却又不知道怎么走回去,便是白走了。
  2. 判断当前一步。判断当前步是否为最终状态,如果是,就别再走了,沿路返回吧。
  3. 走好下一步。当你有很多下一步的选择的时候,你需要去选择哪个作为你的下一步(这便是几个算法最大的不同),由于走错可以重来,倒也只是时间代价的问题。

不断重复以上三步,直到找到终点,或者你再也找不到可选的下一步了

  1. 将当前一步的指针指向前一步,从而记录前一步的走法。
  2. 将当前一步与最终点B进行对比,若相同,则通过每一步所留下的前一步的指针找回到初始位置便是一条路。
  3. 把所有接下来可选的下一步列出来,作为下一步的参考方向。根据不同的算法,有不同的做法。

那么问题已经很清晰了,所有的算法基本上都只对第三步起作用,前两步是完全相同的,那么最基本的三种算法都做了哪些工作呢。

      广度优先算法(BFS):

      我们直接根据上文考虑第三步,广度优先算法顾名思义便是我从某点可能去的某个方向之后,返回前一个方向继续试没走过的方向,直到前一步能去的所有方向都试完之后才从另一个方向试,并且去过的我就不再傻傻的再去了。

      深度优先算法(DFS):

      考虑第三步,深度优先算法顾名思义便是我从某点可能去的方向挑一个去,并且下一步不返回原点,继续在走过的基础上再走下去,并且去过的我就不再傻傻的再去了。

      A*算法,又名启发式算法。

     考虑第三步,首先去过的地方我是不会再去了,然后可选的下一步地方我都列出来,通过某种科学的评估方式,判定哪个下一步比较靠谱,就走哪一步。

上面三种方法描述不够严谨,但是却很简明的体现出了这三种方法的特点,深度和广度优先算法都被称作盲目搜索,因为在选择下一步的时候只是通过自己的某种“习惯”作搜索而已,A*搜索通过了某种科学的评估方式,所以显得就比较“智能”了。


0 0
原创粉丝点击