Best-First-Search算法

缩写起来是跟广度优先搜索一样的BFS,实际上不同。此BFS按照类似Dijkstra的流程运行,不同的是它能够评估任意结点到目标点的代价。与选择离初始结点最近的结点不同的是,它选择离目标最近的结点。BFS不能保证找到一条最短路径。然而,它比Dijkstra算法快的多,因为它用了一个启发式函数(heuristic function)快速地导向目标结点。


看看维基百科的解释:Best-First-Search

最佳优先搜索是宽度优先搜索的扩展,基本思想是将节点表按据目标的距离进行排序,再以节点的估计距离为标准选择待扩展的节点。

算法步骤:

1. 用N表示已经排序的初始结点表(从小到大)

2. 如果N为空集,则退出并给出失败信号

3. n取为N的首结点,并在N中删除结点n,放入已访问结点列表

4. 如果n为目标结点,则退出并给出成功信号

5. 否则,将n的后继结点加到N中,记为N’,对N’中的结点按距目标的估计距离排序,并返回第2步

        

在搜索的过程中一般会用到评估函数f(n),表示从初始节点S经过n到达目的节点t的最佳路径代价f*(n)的估计:

从S到n的最佳代价g*(n)的估计g(n),g(n) ≥ g*(n),即局部最小≥ 全局最小

从n到t 的最佳代价h*(n)的估计h(n),若对所有结点n,都有h(n)≤h*(n),则算法A一定能找到一条到达目标结点的最佳路径,此时算法A称为算法A*

f(n) = g(n) + h(n)作为f*(n) = g*(n) + h*(n)的估计,估计值越小的点希望越高,应该优先扩展,所以可以在此处维持一个优先队列



你可能感兴趣的:(算法)