2019-8-8训练日志

优先队列BFS:对于更加普适性的情况,每次扩展都有各自不同的“代价”时,求最短路时,我们会有两个方法,一个是用一般的广搜,最坏情况下的复杂度为O(N^2)。或者是改用优先队列进行广搜,我们可以每次从队列中取出当前代价最小的状态进行扩展(该状态一定是最优的,因为队列中其他状态的当前代价都不小于它,所以以后就不可能在更新它了),沿着各条分支把到达的新状态加入优先队列。不断执行搜索,直到队列为空。在优先队列BFS中,每个状态也会被多次更新,多次进出队列,一个状态也可能以不同的代价在队列中同时存在,但每个状态从队列中取出时,就得到了从起始状态到该状态的最小代价,之后就可以直接忽略,所以优先队列每个状态只扩展一次,复杂度为O(NlogN).

双向BFS:就是从起始状态和目标状态两边轮流进行,每次各扩展一层,两个搜索相遇时,合并即可得出最小步数。

A*算法是对于BFS时,设计一个估价函数,以任意状态为输入,计算该状态到目标状态时所需要的最小代价的估值,不断取出“当前代价+未来估价”最小的状态进行扩展。相对于来说有一种更优的IDA*算法,在A*的基本思想下,以迭代加DFS的搜索框架为基础,把原来简单的深度限制加强为:若当前深度+未来估计步数>深度限制,则立即从当前分支回溯。效率比A*高,并且程序实现的难度低于A*算法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值