关于深搜和广搜的一些笔记

先引用一些前人的想法

今天也终于领略到什么是深搜什么是广搜的区别和特点了,其实一直不太懂什么时候用深搜,什么时候用广搜,虽然两种都有用过,但是都是结合解题报告或者其他途径来做的,总感觉深搜用起来比较顺手,感觉很多题都可以用深搜来解决,但是今天遇到的这个题用深搜怎么想方设法都不好用,结果应该正确,但是就是TimeLimit,只好用广搜来解了,也颇费周折的各方面查资料知道了广搜一般用在有这样的提示:最短时间或者最短路径,或许这就是基本层面但很有用处的区别,现在的理解就到这里了,另外其他学术性的区别见博客:
————————————————
原文链接:https://blog.csdn.net/u014665013/article/details/43605177

现在知道为什么用宽度搜索了,(1)如果深度搜索的话,会沿着一条路径走到头,包括中间有很多分叉路,这样只有走到头才会停止本次搜索,但是宽度搜索就不一样了,他会按照层数进行查找,这样可以使一些不正确的路径不会走到头,相当于节省了这部分时间,所以相对来书效率就高了。
(2)另外深搜和广搜另外一个很大的不同好像也在于,深搜一般是递归调用函数,这样深搜;但是广搜则是没有递归调用函数,而是通过优先队列来通过循环实现的,这应该也是一个很大的不同吧
————————————————
原文链接:https://blog.csdn.net/u014665013/article/details/43605177

二、广度优先搜索法的显著特点是:
(1)在产生新的子结点时,深度越小的结点越先得到扩展,即先产生它的子结点。为使算法便于实现,存放结点的数据库一般用队列的结构。
(2)无论问题性质如何不同,利用广度优先搜索法解题的基本算法是相同的,但数据库中每一结点内容,产生式规则,根据不同的问题,有不同的内容和结构,就是同一问题也可以有不同的表示方法。
(3)当结点到跟结点的费用(有的书称为耗散值)和结点的深度成正比时,特别是当每一结点到根结点的费用等于深度时,用广度优先法得到的解是最优解,但如果不成正比,则得到的解不一定是最优解。这一类问题要求出最优解,一种方法是使用后面要介绍的其他方法求解,另外一种方法是改进前面深度(或广度)优先搜索算法:找到一个目标后,不是立即退出,而是记录下目标结点的路径和费用,如果有多个目标结点,就加以比较,留下较优的结点。把所有可能的路径都搜索完后,才输出记录的最优路径。
(4)广度优先搜索算法,一般需要存储产生的所有结点,占的存储空间要比深度优先大得多,因此程序设计中,必须考虑溢出和节省内存空间得问题。
(5)比较深度优先和广度优先两种搜索法,广度优先搜索法一般无回溯操作,即入栈和出栈的操作,所以运行速度比深度优先搜索算法法要快些。
————————————————
原文链接:https://blog.csdn.net/u014665013/article/details/39558093

自己的一些总结:
1.在最短路径问题中,如果没走一步的长度/时间不同,则广搜会失效,比如下面这种情况
为什么广搜要求每一步的代价是相同的
2.广搜空间复杂度高,但是如果每一步的长度相同,则得到的解是最短路径。
3.满足以上两点,我们优先用广搜解决最短路径问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值