两种搜索方式的小总结(DFS&&BFS)

  首先要说明的一点就是两种搜索的过程都是一个枚举的过程,无论如何都可以将其视为一种暴力求解的过程,当然这个过程中是可以进行剪枝的,即人为的为其判断进行优化,快速舍弃那些不可能的解,最经典要属奇偶剪枝了,这时符合逻辑的因为起点和重点确实存在这种关系,但是这还是不能改变这一搜索过程是近乎盲目的。好了,了解到这两种搜索的属性,我们不禁要思考在什么情况下要用到这两种搜索方式呢?首先因明确两种搜索方式只是利用了搜索过程中的严谨性,即对人而言大量的组合性运算极容易出错(可能在一个迷宫里,你走了20步,拐了3个弯你就不知道自己是打哪来的了),而计算机不会,只要你愿意,它能记录下所有的信息,这时计算机运行算法的强大所在。所以说组合性的问题就可以用这两种搜索来操作,也即它们能为我们带来我们能够想象到的各种假设,然后根据我们的意愿得到最大值或最小值。那么就解决这类问题会遇到哪些问题呢?BFS肯定要说的就是MLE,相对应的DFS就是TLE了,前者可能消耗过多的存储空间,而后者则在时间上占用太多,前者有稳扎稳打之势,后者则有急功近利之嫌啊。

  BFS如何去优化呢,那便是只允许更“好”的状态加入队列,这个“好”要依题目情况而视定,比如在求淳朴的迷宫中走出迷宫最少时间的问题中,不可能把已经走过的点又走一遍,
  这是无意义的,换句话说,那些走过的点是毫无“好”而言的。呵呵,更高深的我也无法举例出来了。大概在我做的少数题目中都能够类比成这样的。那么DFS呢,既然要在时间
  上优化,那么便是避免搜索到已经被你搜索过的点了,可以看到很多代码中在递归DFS之前都使用了一个标记数组,这样就能避免在后面的递归中重复搜索已经搜索的点了,如
  果不这样,且在递归过程中没有缩小搜索半径的话,嘿嘿,死循环是在所难免的了。

有时候我们会有这样的感触,递归往往会和DFS联系起来,个人觉得DFS还是应该划一块单独的地方给他,不能因为一个要用到递归算法的时候,比如动态规划等等就马上把函数名命名为DFS。

  学习还在继续,在此将现在的自己对于两种搜索的理解记录一下。

转载于:https://www.cnblogs.com/Lyush/articles/2136335.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值