双向搜索算法(基于深度优先搜索算法的优化)

最近在整理搜索算法相关内容,今天来介绍一下双向搜索算法

传统的深度优先算法,通过不断寻找子状态和回溯,来达到遍历所有状态的目的,存在不少缺点。

1. 可能会陷入死循环:如果图中存在环路,深度优先算法可能会陷入死循环,无法找到解决方案。

2. 不一定能找到最优解:深度优先算法只会沿着一条路径一直走下去,直到找到解决方案或者无法继续下去为止。因此,它不能保证找到最优解,有可能会找到次优解。

3. 空间复杂度高:深度优先算法需要使用递归或者栈来保存搜索过程中的状态,因此在搜索深度较大的情况下,空间复杂度会很高,可能会导致内存溢出。

4. 可能会忽略一些解:深度优先算法只会搜索一条路径,如果存在多个解决方案,但是它们不在同一条路径上,那么深度优先算法可能会忽略其中一些解决方案。

而双向搜索算法作为深度优先搜索的一种改进方法,能够解决一些问题

双向搜索算法是一种搜索算法,它从起点和终点同时开始搜索,直到两个搜索路径相遇。这种算法通常用于搜索问题,其中起点和终点之间的距离较远,而搜索空间较大,例如在图形搜索、字符串匹配和游戏搜索中。 双向搜索算法的基本思想是从起点和终点同时开始搜索,每次从两个方向中选择一个节点进行扩展,直到两个搜索路径相遇。这种算法可以减少搜索空间,因为它同时从两个方向搜索,可以更快地找到解决方案。 双向搜索算法的优点是可以减少搜索空间,因为它同时从两个方向搜索,可以更快地找到解决方案。缺点是需要额外的空间来存储两个搜索路径,并且需要更复杂的算法来处理两个搜索路径的交叉点。 双向搜索算法的应用非常广泛,例如在图形搜索中,可以从起点和终点同时开始搜索,以找到最短路径。在字符串匹配中,可以从两个方向同时搜索,以找到匹配的字符串。在游戏搜索中,可以从当前状态和目标状态同时开始搜索,以找到最优解。

下面是双向搜索算法解决八数码问题的实例

具体代码思路:声明两个path队列分别记录由源节点和目标节点出发搜索的节点,while循环出队两者中数据量较小的队列的队首节点,进行扩展和入队。用两个rep栈为两条线路查重,如果有元素在两个查重栈中都有则两个搜索相遇,返

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值