您的位置:首页 > 其它

集训第十天(2017/8/9):搜索专题最后一天,总结

2017-08-09 19:51 267 查看
     因为我的进度有些慢,所以这十天的搜索专项训练只练习了深度优先搜索(DFS),广度优先搜索(BFS),最短路径算法(Floyed算法和Dijkstra算法),在这里做一下总结吧:

    首先是DFS,这种算法也叫搜索与回溯算法,主要是用递归来实现,今天有详细看了一下递归,这是一个很难懂的算法,明白了递归算法,dfs也就不难理解了。

    首先,递归为什么叫递归?顾名思义,递(递去)归(归来),这包含着递归的两种实现方式,一是在一层一层的往下递去的过程中得出解,这与迭代很相似;二是迭代到尽头,返回上一步,上一步再返回它的上一步...一直到得出解,这就是回溯。所以目前我所掌握的递归可以解决两种问题:一是在去的路上得出了解,二是在回来的路上得出解(恩。。。比较肤浅的理解吧)。

    而搜索与回溯算法就是用了递归的第二种方法:为了求得某一问题的解,先选择一种情况向下探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向下探索,如此反复直到得出解或者证明无解。这就是DFS的原理。

   再谈一谈BFS,个人认为BFS比DFS简单,因为不用递归(思维量小很多啊~~~),这个算法原理是:从初始节点开始,应用算符生成第一层节点,检查目标节点是否在这些后续节点中,若没有,再用产生式规则(一般用队列来实现)将第一层节点逐一扩展(将第一层拓展的节点加入队列),得到第二层节点,并逐一检查第二层节点中是否包含目标节点,若没有,再逐一扩展到下一层节点...直到发现目标节点为止。

   然后是最小路径算法:floyed算法和dijkstra算法,都很有名,在这里三言两语讲不清楚啊,算法书上都有详细的解释啊~~~。

   明天就是单调队列和二分法的专题了,一定要跟上!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: