有序搜索的原理特点:
有序搜索(Ordered Search)又称之为最佳优先搜索(Best First Search),是一种启发式搜索算法,我们也可以将它看作广度优先搜索算法的一种改进;最佳优先搜索算法在广度优先搜索的基础上,用启发估价函数对将要被遍历到的点进行估价,然后选择代价小的进行遍历,直到找到目标节点或者遍历完所有的点,算法结束。
要实现最佳优先搜索我们必须使用一个优先队列(Priority Queue)来实现,通常采用一个open 优先队列和一个closed 集open 优先队列用来储存还没有遍历将要遍历的节点,而closed 集用来储存已经被遍历过的节点。我们用下面图作为一个示例图来描述最佳优先搜索过程。
有序搜索的例子:
最佳优先搜索的过程如下图所示,可以被描述为:
搜索出的路径为:A-H-G-D-E,整条路径的代价和为16。
(1)将根节点放入优先队列 open 中。
(2)从优先队列中取出优先级最高的节点X 。
(3)根据节点X 生成子节点Y :
X 的子节点Y 不在 open 队列或者 closed 中,由估价函数计算出估价值,放入open 队列中。
X 的子节点Y 在open 队列中,且估价值优于open 队列中的子节点Y ,将 open 队列中的子节点Y 的估价值替换成新的估价值并按优先值排序。
X 的子节点Y 在closed 集中,且估价值优于closed 集中的子节点Y ,将 closed 集中的子节点Y 移除,并将子节点Y 加入open 优先队列。
(4)将节点X 放入closed 集中。
(5)重复过程2,3,4直到目标节点找到,或者open 为空,程序结束。