关于搜索的总结

     最近这几个星期一直在做搜索的题,关于搜索比刚是学的时候有了更深刻的了解,普通的对于我来说已经很好解决,不过碰到难的像是双向BFS或是关于特殊状态的存储这一类的题还是不太会做,自己对此理解的也不够深刻,还是很仰慕那些神牛级的人物啊!说说BFS吧,做题是肯定是用到队列啦,BFS类似于层次遍历是一层一层向外扩展,通常用来求最小的步数,最短距离神马的。借助于队列可将每一步扩展的数值保存在队列里,再出队列判断是否满足要求,如果满足要求就停止打印步数,如果不满足则继续遍历想外层扩展,知道找到位置才停下。最后再用while循环时不要忘了一定要清空队列,应为队列里可能保存着上次遍历留下的值;有时也会遇到关于延迟的效应,此时BFS就不能用简单的队里来存储了,应为简单的队列是一层一层向外扩展的,而是要使用优先队列来存储数据让它自动排序,这要借助于C++当中的模板库了(C++是个好东西暑假好好学一下,嘿嘿!)。
关于DFS,主要用到的是求解皇后问题,不过此时最主要的是回溯法的应用,它的核心思想就是一级一级往下搜索,用栈来保存数据,不过通常栈在题目中是不会写出来的,而是你脑子里的思维过程,此题通常用来做判断是否能到达或是是否能在迷宫里找到宝藏之类的,在搜索的过程中如果走到尽头还是没有找到则出栈,进行另外邻结点的搜索,类似于先序遍历。不过很少在题目中会遇到单纯的DFS因为它很容易爆栈,通常情况下都要进行剪枝,来减小时间复杂度,这是DFS的关键(我对剪枝理解的并不是太好,所以对DFS的掌握不如BFS),也决定了你的代码是AC还是TLE。
好了关于搜索就说这么多,接下来的几个星期我要好好学习一下DP和JAVA了跟着老师的节奏太慢了,学不了啥东西。好吧只有自己提前学了。额,好像这一章算法设计与分析就是讲到DP还是好好学习一下吧!最后也免不了给自己以鼓励,朝着自己的目标努力。
posted @ 2012-03-18 11:28  zhongya  阅读(221)  评论(0编辑  收藏  举报