启发式搜索的方式(深度优先,广度优先)和 搜索方法(Dijkstra‘s算法,代价一致搜索,贪心搜索 ,A星搜索)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、深度优先和广度优先
  • 二、代价一致搜索,贪心搜索 ,A星搜索
  • 总结


前言

启发式搜索(Heuristically Search)又称为有信息搜索(Informed Search),它是利用问题拥有的启发信息来引导搜索,达到减少搜索范围、降低问题复杂度的目的,这种利用启发信息的搜索过程称为启发式搜索。启发式搜索(Heuristically Search)又称为有信息搜索(Informed Search),它是利用问题拥有的启发信息来引导搜索,达到减少搜索范围、降低问题复杂度的目的,这种利用启发信息的搜索过程称为启发式搜索。

搜索方式有:深度优先,广度优先

搜索方法有:Dijkstra’s算法,代价一致搜索,贪心搜索 ,A星搜索


一、深度优先和广度优先

不同的搜索算法根据添加新节点的顺序不同而区分,就是拓展步骤候选节点的选择顺序策略
从这种角度考虑时,深度优先搜索(DFS)和广度优先搜索(BFS)其实在处理新节点的方法上是一样的

区别仅仅在:

       - 深度优先搜索,在队列的头加入新的候选节点
       - 广度优先搜索,在队列的尾加入新的候选节点

二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。

深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次。要特别注意的是,二叉树的深度优先遍历比较特殊,可以细分为先序遍历、中序遍历、后序遍历。具体说明如下:

先序遍历:对任一子树,先访问根,然后遍历其左子树,最后遍历其右子树。
中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树。
后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。

广度优先遍历:又叫层次遍历,从上往下对每一层依次访问,在每一层中,从左往右(也可以从右往左)访问结点,访问完一层就进入下一层,直到没有结点可以访问为止。

启发式搜索的方式(深度优先,广度优先)和 搜索方法(Dijkstra‘s算法,代价一致搜索,贪心搜索 ,A星搜索)_第1张图片
先序遍历:35 20 15 16 29 28 30 40 50 45 55
中序遍历:15 16 20 28 29 30 35 40 45 50 55
后序遍历:16 15 28 30 29 20 45 55 50 40 35
广度优先遍历:35 20 40 15 29 50 16 28 30 45 55

二、代价一致搜索,贪心搜索 ,A星搜索

最佳优先搜索 Best First Search 使用评价函数 f(x) 来对上述的节点选择顺序进行排序

下面先定义两个函数

g(x) 为从根节点到x节点的代价总和

h(x) 为从x节点到目标节点的估计代价总和

这类应用算法有

代价一致搜索 (Uniform Cost Search or Dijkstra search) f(x) = g(x)

贪心搜索 (Greedy Search) f(x) = h(x)

A星搜索 (A* Search) f(x) = g(x) + h(x)

更具体的解释和例子见总结中的链接。

总结

这个网址对算法进行了可视化表示,非常有助于理解,强烈推荐!!!!!link

你可能感兴趣的:(基础,数据结构)