应该翻译成正向搜索和反向搜索?
反正意思就是backward指从目标节点到起始节点的搜索,forward指从起始节点到目标节点的搜索
常见的比如A* 就是forward search,D* 是backward search。那么问题来了,两种方法肯定是有优劣的。
我们简单的用下面这个例子描述问题
如果正向搜索显然会因为很多分支导致效率下降,但是如果反向搜索会得到如下结果,访问的节点数会少很多
现在我们这样来定义这个问题,f(v,d)表示一组节点的集合,其中节点距离节点v的距离都小于距离d。现在假设起始节点为s,目标节点为t。
那么,当f(s,d) < f(t,d) forward search更好,也就是起始节点附近满足距离d的节点数小于目标节点附近满足距离d的节点数
当f(s,d) > f(t,d) backward search更好
这里我联想到RRT(Rapidly-exploring random tree)算法,也顺便记一笔
在我们迭代RRT的时候,我们定义的节点是可以有多个子节点,但只有一个父节点。当迭代条件停止(迭代数达到最大或者树中的节点距离目标点已经足够近了)。我们从目标点附近往回开始backward search就可以找到整条路径