练习2——搜索总结

 广义的搜索算法分为四个大类,二分查找算法(Binary-Search),三分搜索算法(Ternary search),深度优先搜索算法(DFS),广度优先搜索算法(BFS)。前两个是针对给定公式的求解思路,后两个是针对给定图形的求解思路

 

(一)二分查找算法

    二分查找主要针对的是单调函数给定函数值,求自变量值的情况,非常简单,优点是比较次数少,查找速度快,平均性能好,二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.。这里需要注意的是,不一定非单调函数就不能用二分,有时结合求导。可以求出函数单调性,从而求极值。例如1002题,需要先对给定函数求导,然后再二分,从而求解。

 

(二)三分搜索算法:

   分查找主要针对的是凸性函数给定函数值,  求自变量值的情况,难道较大,是在二分的基础上,对某一区间再次二分的一种算法。如图所示,已知左右端点LR,要求找到白点的位置。

思路:通过不断缩小 [L,R] 的范围,无限逼近白点。

做法:先取 [L,R] 的中点 mid,再取 [mid,R] 的中点 mmid,通过比较 f(mid) f(mmid) 的大小来缩小范围。当最后 L=R-1 时,再比较下这两个点的值,我们就找到了解。

(三)DFS:

       深度优先算法属于图算法的一种,其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.

深度优先遍历图的方法是,从图中某顶点v出发:

1)访问顶点v

2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;

3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。

原来对DFS的理解仅仅局限于图,现在发现这只是最基础的。DFS更多的表示的是一种状态,然后利用某中很简单的思维进行一次次的尝试,每次尝试成功了,就深入一层递归进行下一次尝试,直到之后的尝试表明已经失败了不会成功,则回溯到这里。取消这次的尝试,去尝试其他的操作。简单地说,就是暴搜。只不过利用了递归来实现尝试失败时的回溯,从而进行新的尝试。

 

(四)BFS:

       从算法的观点,所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中,每次取出队首元素进行检验,如果符合条件,就停止,如果不符合就剔除掉,循环检验,知道队列为空位置。BFS在求解最短路径或者最短步数上有很多的应用。应用最多的是在走迷宫上,例如本专题的国际象棋问题,就是使用了此种思路。

   

    

    随着时间流逝。专题2搜索也快完结了,和练习1贪心算法相比,搜索的灵活性并不是很强,也不是很需要动脑(不用较劲脑汁的去想贪心的条件),不管是DFS,还是BFS,都有着固定的套路,多做几个题就会发现,几乎所有的DFSBFS都像是一个模子里出来的,换汤不换药。我认为搜索的难点在于排除条件的确定和剪枝以及搜索与二分混用的情况。与上一个专题相比,本次的题量比较大,我也没有全做完(26个题,只做了20个)。希望下个专题能全部AC吧。

 


 





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值