大一二学期 1-2 周 笔记 _____专题 搜索
2012-03-11 22:14 java环境变量 阅读(229) 评论(0) 收藏 举报 大一二学期 1-2 周 笔记
这两周ACM专题是搜索。还是有点收获的,理解了队列和栈,对于DFS和BFS也理解了些。 一共14道题,完成了10道。 小张 全部做完了 ,确实还是很厉害的。以后一个队伍,不能给队伍拖后腿,下个专题 hash 和 二分查找,计划花多一点时间和精力到这上面。 彪哥说其实区域赛拿个奖也不是很难,从现在开始 坚持到大二,或者大三。既然下定了决心 ,就必须出成绩! 因为ACM将花掉我大学两到三年的绝大部分空闲时间,投入是很大的.
这两周有一个问题,就是玩游戏的时间过多, 那样很浪费时间。 公共课程不能落下了。 现在的社会现实就是这样: 一个人的发展潜力还是取决于综合能力。 抱怨企业用学历卡人也没用。换个角度想想:如果自己是老板,前面一群研究生,985 211 在那,为什么要来先看你! 以前想的就是把专业学牛一点,其他课程随便。自己了解的东西多一点了,也就放弃了那种想法。 自己想想 ,逃了的课,都用于专业的学习了吗? 很多时候还不是玩游戏,睡觉。 现在的想法是 公共课程必须跟上,考研相关的课程学好。其他时间花在ACM上。
不要以没有太多时间搞专业来当借口,想想被自己因为其他原因浪费掉的时间。
英语是现在最大的问题,英语对于以后的发展很重要! 但现在自己坚持每天学英语却好像这么难。 总是忘记学习英语,根本就没得学英语的习惯! 英语没办法逃避,必须跨过这道坎。
唉,现在回想小时候老妈和老师们反复强调的学习习惯,小时候以为养成一个好的学习习惯就是期末考能考好点。。。现在发现,小小的学习习惯四个字,很大程度影响了一个人一生的发展。
search 学习报告
search 的两种基本算法, DFS 和BFS DFS (深搜) 主要是通过函数的递归调用,一步一步深入搜索。 DFS优先深入搜索。学到了回溯的思想,回溯就是边搜索边判断,如果判断失败,即没有必要继续深入搜索,那就不深入这条路径搜索。 关键就是每到一个节点 都判断。 DFS 如果不剪枝,效率是很低的,所以进一步的学习就是剪枝。
BFS (宽搜) 宽搜的基础就是队列,宽搜是通过队列实现的,我是到第一周末才终于知道队列和栈是个什么东西 - - 。 寒假就开始接触队列和栈,基本特征也都懂,但就是不明白怎么实现队列和栈。 后来通过一道宽搜的题终于明白了队列,队列和栈就是一种数据结构,队列先进先出,栈后进先出。 队列和栈可以通过一个数组来实现。也可以直接利用 C++ STL
中的 queue 和 stack 实现。 下面写点队列的关键语句为例。
对列: int queue[20];
int front=0 ,rear=0,num;
while(front<rear) //队列非空
queue[rear++]=1; //进队
num=queue[front++]; //先入的先出队
如果是用c++的STL 更简单:
#include<queue> //队列头文件
queue<int > q; //定义队列
num=q.front(); //前面的元素出队
q.pop(); //删除前面的元素
q.push(1); //数字1 入队
while(!q.empty()) // 队列非空
栈同样可以通过一个数组或c++的STL实现。
宽搜就是层次遍历。是一层一层的搜索,从起点开始扩展。每深入下一层,都需要记住 父节点,如果需要打印路径 则记录来的方向。 最后搜索到终点后,只要一步一步通过父节点就可以回到起点,这个过程就可以统计步数和打印路径。
举个例子。
1
/ \
2 3
/ \ / \
4 5 6
......
如果是从1开始搜索,终点是5
DFS的搜索路径是 1 2 4 2 5
BFS的路线是 1 2 3 4 5 同时 记下 2的父节点是1,4和5的父节点是2 。
当然,要搞懂学深只能是靠题。
浙公网安备 33010602011771号