DFS,简单 ≠ 高效

今天去一家公司面试,面试官出了一道算法题:

一堆相连的房间,房间和房间之间有门,数量不定。然后就是小老鼠从角落出发,找到有唯一有奶酪的房间。

题目很简单,典型的小老鼠走迷宫,图搜索算法。

说道图搜索,比较常见的么 BFS,DFS,A* 这几种算法。

小老鼠走迷宫这类问题,和直接的图搜索有区别的就是,路径包含状态的回退。图搜索算法,要么队列,或者栈中,保存的都是待搜索节点,中间存在跳跃,需要进行回退,以保持小老鼠移动的连续性。

这三种方法中,DFS的移动到待搜索节点是最简单的,根据历史路径回退即可。而BFS和A*移动到待搜索节点,则需要计算中间路径(我用的是当前节点的历史路径和目标节点的历史路径,求公共点,添加到移动路径中,此方法同样适用于DFS),所以BFS和A*,会看起来更复杂。

但是,DFS回退是简单,但是DFS的搜索效率是比较低的,尤其在迷宫很大的时候。

所以还是推荐使用A*算法,估值函数的使用,会使得搜索更加高效。尤其在节点很多的场景下越发明显。

简单 ≠ 高效

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值