浅谈回溯算法及其相关优化方法和Best First Search扩展
在看回溯算法的时候有看到这个概念,就查询了一下网上的资料,发现都是一些形式化的概念,今天我就按照我的理解简述一下这个算法策略以及其相关内容吧。 注:本文中所有提到的BFS均指的是Best First Search不是宽度优先遍历
1.回溯算法
这个是最基础的搜索算法,也是对解空间的暴力搜索算法,举个栗子,8-Puzzle问题,类似于魔方,将所有的情况都转化为终点情况,回溯就是暴力枚举所有的解,如下图所示:

爬山法:

3.Best First Search
这里相比于爬山法的区别就是,爬山法是的评价函数是针对当前的状态评价下一步,而BFS是使用当前状态到终点的距离判断来判断下一步该往哪里走,当然也可以设置为当前的状态,这看解题者如何处理这个函数了。这个BFS可以使用在单源最短路中,由于其局部优化的观念,导致可能不是最优解,但是在要求精度不高的情况下换来的是时间很快。
Best First Search:

4.分支界限策略
理解了上面那两个策略以后,咱立马用起来,首先使用上面的策略产生分支,然后根据代价矩阵或者代价评价函数计算界限,这个界限指的是不可能继续优化的界限,防止不可继续优化而继续优化的计算资源浪费,将不可继续优化的分支裁剪掉,不再继续扩展下去。
5.A*算法
这里是一点扩展内容,大家应该都知道dijkstra算法,是计算单源最短路的公认的方法,但是有时候计算时间也就是时间复杂度还是比较高的,而BFS速度比较快,A*就是这两种方法的结合体,设计一个评价函数F(x)= a(x)+ b(x),a(x)为起点到当前点的最短路径也就是dijkstra算法的计算公式,而b(x)指的是当前点到终点的距离评价函数,综合F(x)是总评价函数,作为下一个扩展点的评价函数,可以加快dijkstra算法的速度和BFS的精确度,可以说是比较均衡的算法,在实际应用中使用范围很广,是一个人工智能搜索算法。
2020-11-20 01:01:10