DFS 和 BFS 的做题感受
2016-08-30 21:18
176 查看
最近,很是不在状态啊。
第一,自从回家之后,很是膨胀,大概有十天时间没有更新过博客了,而且暑假学的东西虽然当时可能理解了,但是现在从头开始复习,各种不会,我的天呐,我是怎么了!!!!!
第二,开学了,自己能水的特点又出来了,各种水群,真的是太浪费时间和生命了啊!! 很尴尬,这种事情又没法控制,只能说,我就是一个大水比!!!!!!! 改,以后让人给我禁言了算了。
第三,刚刚开学,这学期不想逃课了,想把成绩弄上去,虽然别人说成绩可能不太重要,但是我不行啊,我有自己的认知,这学期课程主要有1概率论2数据结构3java4逻辑与代数5大学物理6数字逻辑。总体来说,数据结构和java必须学好 没的说,概率论,逻辑与代数,数字逻辑也大部分时间来学吧。至于大物,基本放弃吧。。。。。真的不适合学了、没有思想了这种事情上学期就感觉出来了。
第四,自从暑假集训开始,自己的锻炼计划就失效了,现在开始要进行恢复训练了,每个星期三,五,天跑步。每次速度要逐渐提升到最后一小时能跑10公里就行。 接下来是做DFS 和BFS 的一些看法了,从网上别人那里摘取来的
一般来说,广搜常用于找单一的最短路线,或者是规模小的路径搜索,它的特点是”搜到就是最优解”, 而深搜用于找多个解或者是”步数已知(比如3步就必须达到条件)”的问题,它的空间效率高,但是找到的不一定是最优解,必须记录并完成整个搜索,故一般情况下,深搜需要非常高效的剪枝(优化).
像搜索最短路径这些的很明显要是用广搜,因为广搜的特性就是一层一层往下搜的,保证当前搜到的都是最优解,当然,最短路径只是一方面的应用,像什么最少状态转换也是可以应用的。
深搜就是优先搜索一棵子树,然后是另一棵,它和广搜相比,有着内存需要相对较少的优点,八皇后问题就是典型的应用,这类问题很明显是不能用广搜去解决的。或者像图论里面的找圈的算法,数的前序中序后序遍历等,都是深搜
深搜和广搜的不同之处是在于搜索顺序的不同。
深搜的实现类似于栈,每次选择栈顶元素去扩展,
广搜则是利用了队列,先被扩展的的节点优先拿去扩展。
搜索树的形态:深搜层数很多,广搜则是很宽。
深搜适合找出所有方案,广搜则用来找出最佳方案
深搜和广搜的区别:
深搜并不能保证第一次遇到目标点就是最短路径,因此要搜索所有可能的路径,因此要回溯,标记做了之后还要取消掉,因此同一个点可能被访问很多很多次。而广搜由于它的由近及远的结点扩展顺序,结点总是以最短路径被访问。一个结点如果第二次被访问,第二次的路径肯定不会比第一次的短,因此就没有必要再从这个结点向周围扩展――第一次访问这个结点的时候已经扩展过了,第二次再扩展只会得到更差的解。因此做过的标记不必去掉。因此同一个点至多只可能被访问一次。每访问一个结点,与它相连的边就被检查一次。因此最坏情况下,所有边都被检查一次,因此时间复杂度为O(E)。
第一,自从回家之后,很是膨胀,大概有十天时间没有更新过博客了,而且暑假学的东西虽然当时可能理解了,但是现在从头开始复习,各种不会,我的天呐,我是怎么了!!!!!
第二,开学了,自己能水的特点又出来了,各种水群,真的是太浪费时间和生命了啊!! 很尴尬,这种事情又没法控制,只能说,我就是一个大水比!!!!!!! 改,以后让人给我禁言了算了。
第三,刚刚开学,这学期不想逃课了,想把成绩弄上去,虽然别人说成绩可能不太重要,但是我不行啊,我有自己的认知,这学期课程主要有1概率论2数据结构3java4逻辑与代数5大学物理6数字逻辑。总体来说,数据结构和java必须学好 没的说,概率论,逻辑与代数,数字逻辑也大部分时间来学吧。至于大物,基本放弃吧。。。。。真的不适合学了、没有思想了这种事情上学期就感觉出来了。
第四,自从暑假集训开始,自己的锻炼计划就失效了,现在开始要进行恢复训练了,每个星期三,五,天跑步。每次速度要逐渐提升到最后一小时能跑10公里就行。 接下来是做DFS 和BFS 的一些看法了,从网上别人那里摘取来的
一般来说,广搜常用于找单一的最短路线,或者是规模小的路径搜索,它的特点是”搜到就是最优解”, 而深搜用于找多个解或者是”步数已知(比如3步就必须达到条件)”的问题,它的空间效率高,但是找到的不一定是最优解,必须记录并完成整个搜索,故一般情况下,深搜需要非常高效的剪枝(优化).
像搜索最短路径这些的很明显要是用广搜,因为广搜的特性就是一层一层往下搜的,保证当前搜到的都是最优解,当然,最短路径只是一方面的应用,像什么最少状态转换也是可以应用的。
深搜就是优先搜索一棵子树,然后是另一棵,它和广搜相比,有着内存需要相对较少的优点,八皇后问题就是典型的应用,这类问题很明显是不能用广搜去解决的。或者像图论里面的找圈的算法,数的前序中序后序遍历等,都是深搜
深搜和广搜的不同之处是在于搜索顺序的不同。
深搜的实现类似于栈,每次选择栈顶元素去扩展,
广搜则是利用了队列,先被扩展的的节点优先拿去扩展。
搜索树的形态:深搜层数很多,广搜则是很宽。
深搜适合找出所有方案,广搜则用来找出最佳方案
深搜和广搜的区别:
深搜并不能保证第一次遇到目标点就是最短路径,因此要搜索所有可能的路径,因此要回溯,标记做了之后还要取消掉,因此同一个点可能被访问很多很多次。而广搜由于它的由近及远的结点扩展顺序,结点总是以最短路径被访问。一个结点如果第二次被访问,第二次的路径肯定不会比第一次的短,因此就没有必要再从这个结点向周围扩展――第一次访问这个结点的时候已经扩展过了,第二次再扩展只会得到更差的解。因此做过的标记不必去掉。因此同一个点至多只可能被访问一次。每访问一个结点,与它相连的边就被检查一次。因此最坏情况下,所有边都被检查一次,因此时间复杂度为O(E)。
相关文章推荐
- DFS算法,BFS算法遍历图
- 递归,回溯,DFS,BFS的理解和模板
- POJ 2386 Lake Counting (DFS or BFS)
- POJ3083 Children of the Candy Corn (BFS ,DFS)
- Children of the Candy Corn(dfs+bfs)
- DFS和BFS的思路模板伪代码
- 图的深度优先搜索(DFS),广度优先搜索(BFS)与最小生成树(MST)
- HDOJ 1241 Oil Deposits——邻接矩阵BFS和DFS
- BFS和DFS模板
- hdu1044【bfs+dfs】
- BFS和DFS
- 迷宫求解算法(栈DFS以及队列BFS)
- dfs 和bfs
- 数据结构--图--图的存储结构/DFS/BFS
- bfs与dfs
- dfs+bfs(三种路径问题)
- HDU 1241 Oil Deposits (DFS/BFS)
- DFS && BFS 最少步数(nyoj 58)
- 图结构练习——BFSDFS——判断可达性
- lightoj Winter 1084 (dfs&&bfs求最少堆数) 好题