搜索算法在路径规划、行为决策、语句识别、语义分析等多个领域都发挥着非常重要的作用,以下是我本周对搜索算法的一些简单总结:
1. 首先是深度优先搜索,这是一种无信息搜索,就是不知道启发条件,不含有什么其他的信息,只是知道起点和终点,让机器去进行搜索,这个其实是一种树搜索,每一次将深度最深的那个节点进行优先探索,若不是终点,则将其拓展并将它的子节点纳入边缘空间,若是边缘空间中所有的节点都是同一个深度,那么就探索最左边的那个节点。如下图所示,机器需要搜索从S到G的路径,首先探索S,发现S中不含有终点,于是机器将dep这三个S的子节点纳入边缘空间中,然后因为dep这三个节点都是同一深度,所以探索最左边的d节点,d节点中有bce三个子节点,也不含有终点,于是将bce三个子节点纳入边缘空间中,此时边缘空间中的节点为bceep五个节点,这五个节点中bce的深度为2,然后又因为b节点是最左边的节点,于是又探索b,b中只含有a节点显然不是终点,且a节点无法继续拓展,于是接下来探索c节点...依此类推就是整个深度优先搜索的大概过程。这种搜索的优点是机器每次只需要探索最深的那个点,而且边缘空间中的节点也不会太多,不会占用太多的内存。缺点是如果某个节点具有无限的拓展性,那么这种算法将有可能找不到最终的值即便这个值是存在的,也就是说这种算法无法保证完备性。而且显然这种方法在正常情况下是比较耗费时间的,并且无法保证所寻找的路径是最优解,即无法保证最优性,如下图所示,若是按照这种方法搜索,那么路径为sderfg,但是我们通过观察显然最优的路径是serfg。所以这种方法无法保证最优性。
2. 广度优先搜索,这个也是一种无信息搜索,也是只知道起点和终点然后让机器去搜索,与深度搜索不同的是它每次拓展的是边缘空间节点中最浅的那个节点,都是同一个深度的话就拓展最左边的那个节点,若是借用下图来说