DFS 和 BFS 的做题感受

最近,很是不在状态啊。
第一,自从回家之后,很是膨胀,大概有十天时间没有更新过博客了,而且暑假学的东西虽然当时可能理解了,但是现在从头开始复习,各种不会,我的天呐,我是怎么了!!!!!
第二,开学了,自己能水的特点又出来了,各种水群,真的是太浪费时间和生命了啊!! 很尴尬,这种事情又没法控制,只能说,我就是一个大水比!!!!!!! 改,以后让人给我禁言了算了。
第三,刚刚开学,这学期不想逃课了,想把成绩弄上去,虽然别人说成绩可能不太重要,但是我不行啊,我有自己的认知,这学期课程主要有1概率论2数据结构3java4逻辑与代数5大学物理6数字逻辑。总体来说,数据结构和java必须学好 没的说,概率论,逻辑与代数,数字逻辑也大部分时间来学吧。至于大物,基本放弃吧。。。。。真的不适合学了、没有思想了这种事情上学期就感觉出来了。
第四,自从暑假集训开始,自己的锻炼计划就失效了,现在开始要进行恢复训练了,每个星期三,五,天跑步。每次速度要逐渐提升到最后一小时能跑10公里就行。 接下来是做DFS 和BFS 的一些看法了,从网上别人那里摘取来的

一般来说,广搜常用于找单一的最短路线,或者是规模小的路径搜索,它的特点是”搜到就是最优解”, 而深搜用于找多个解或者是”步数已知(比如3步就必须达到条件)”的问题,它的空间效率高,但是找到的不一定是最优解,必须记录并完成整个搜索,故一般情况下,深搜需要非常高效的剪枝(优化).

像搜索最短路径这些的很明显要是用广搜,因为广搜的特性就是一层一层往下搜的,保证当前搜到的都是最优解,当然,最短路径只是一方面的应用,像什么最少状态转换也是可以应用的。
深搜就是优先搜索一棵子树,然后是另一棵,它和广搜相比,有着内存需要相对较少的优点,八皇后问题就是典型的应用,这类问题很明显是不能用广搜去解决的。或者像图论里面的找圈的算法,数的前序中序后序遍历等,都是深搜

深搜和广搜的不同之处是在于搜索顺序的不同。

深搜的实现类似于栈,每次选择栈顶元素去扩展,

广搜则是利用了队列,先被扩展的的节点优先拿去扩展。

搜索树的形态:深搜层数很多,广搜则是很宽。

深搜适合找出所有方案,广搜则用来找出最佳方案

深搜和广搜的区别:

深搜并不能保证第一次遇到目标点就是最短路径,因此要搜索所有可能的路径,因此要回溯,标记做了之后还要取消掉,因此同一个点可能被访问很多很多次。而广搜由于它的由近及远的结点扩展顺序,结点总是以最短路径被访问。一个结点如果第二次被访问,第二次的路径肯定不会比第一次的短,因此就没有必要再从这个结点向周围扩展――第一次访问这个结点的时候已经扩展过了,第二次再扩展只会得到更差的解。因此做过的标记不必去掉。因此同一个点至多只可能被访问一次。每访问一个结点,与它相连的边就被检查一次。因此最坏情况下,所有边都被检查一次,因此时间复杂度为O(E)。

    原文作者:DFS
    原文地址: https://blog.csdn.net/qq_31736627/article/details/52373068
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞