对于图搜索算法来说,有一类是盲目搜索,比如BFS与DFS.他们的缺点是耗时,而且有可能找到的解并不是最优解,这里可以举例DFS算法求解八数码的时候,找到的解路径不一定是最短的路径.老师上课画了一个三角形,好比是一个问题的所有求解空间,盲目搜索有可能吧他们都遍历一遍,所以这些时候就需要我们做一些优化了.
什么叫作A算法,A算法使用一个f(n)评价函数对每一个open表里的节点计算值并且排序,f(n)=g(n)+h(n) . g(n)代价函数,计算已经走过的距离,通过不同的路径可能有多个值,取最小的那个;h(n)启发函数,唯一值,这个函数是一个抽象的概念,计算的是到终点的距离,在八数码这个游戏中,h(n)=不在最终位置的数字的个数.每次都计算open表节点的f(n)的值,并且排序,取f(n)值最小的那个节点,把他放入close表并拓展.这种启发式的搜索算法就是A算法.
A*算法就是为f(n)设定了个上限值,比如最短路径的长度,这样,在搜索的时候,可以很快地排除一些不是最短路径的解.