深度优先、广度优先
老师以一个地图的例子贯穿整节课讲解各种搜索算法。
如图所示:
我们的目标是从S开始到G,选择一条最优路径
老师介绍了两种搜索方式:深度优先和广度优先。
一、深度优先:不断向下进行路径的搜索,然后回到上层选择另一分支(backtracking)。用图表示:
最后,D往下到达了G,搜索结束。
二、广度优先:一层一层建立目标树,如图所示:
每完成一层的搜索横向扫描是否有G,在第三层扫描{C,G,D,E}的时候,发现的了G,故路径为S->A->D->G,搜索结束。
用队列的思想来表达的话,流程为:
小结:虽然深度优先算法和广度优先算法都能最终找到路径,但是我们可以发现,深度优先算法会经过很多次回溯,广度优先算法则是列举在找到最佳路径前所有的路径,这样的算法并不智能,程序运行的效率低,时间长。此外,老师利用发杂的路线程序距离,不同的扩展算法得到的最优路径也不同,并且有时候我们用直觉来看并不是最佳路径。为此引入扩展列表算法:除非末端节点从未被扩展过,我们才去扩展该节点。
如图所示: