这一周的训练题目主要围绕搜索,通过一天的复习和题目训练,对两种搜索方式有如下总结:
广度优先搜索依靠队列实现,在队列尾部放置元素,在队首取出元素,在函数体中通过循环列举下一步中可能的元素并加入队列
深度优先搜索依靠栈实现,在栈尾放置元素和取出元素,通过在函数中定义所有可能来实现算法,靠回溯、剪枝简化算法两种搜索方法根本上都可以分别通过队列和栈的原理解决问题。BFS通过在队列中不断加入符合条件的元素来解决问题。DFS通过在栈中加入符合条件的的元素来解决问题,也可以通过递归方法实现。而我认为DFS和BFS的难处在于对栈和队列的理解与应用不足。
通过一天的练习,发现了自己的两个问题:在编写程序时的一个问题就是不能够将步骤一次写到很简洁的程度,经常需要在写完的程序上不断作出修改来实现代码的简化。我想这应该是可以通过不断地训练来提高的吧。另一个问题就是读题目不能详细地理解,大概的了解题意加上对不认识的单词含义的臆断让我将一道较为困难的题目理解成了很快能够出结果的简单题目,当怎样验证都无法得到与题目相符的答案后,我在网上找到了题目的翻译,结果发现和我理解的内容有很大不同,并且难度也提升了不少,只能先做其他题目。
第一天训练的最大收获就是对于题目的难易程度能够在看题后有一个大概的把握,对与搜索类的题目也有一个较为清楚的思路。能够明显地感觉到上午思考问题的思路要比下午晚上的思路要模糊很多。
最后感慨一下留校训练这个决定有多么正确,到底身边的同学都是以后要成为代码猴子的人,敲起代码来非常用功甚至连吃饭都记不起来,非常庆幸有这样的机会来提升自己的水平。