算法内容

虽然上文已说转专业考试仅少部分题目考察算法。但算法的定义是很广的,很多思维方式是不是应该算在算法的范围内也是说不准的。

如果按照比较广义的定义,将递归也纳入算法范围的话,那么对算法的考察其实还是不少的。至少编程题应该会有两题涉及递归思想(其中或许有一题可以不用递归做,但用递归会很方便),而剩下的题目中应该也会有不少可以用递归简化。

除递归外,一般会有两题压轴题会考察诸如动态规划、广度优先搜索等方面的算法知识,考的不会太深,但也确实有一定难度,而且一般会有 0.1 秒的超时判定。好在阅卷的机器似乎性能很不错,不太容易超时,而且数据集也很水,考虑边界情况的数据比较少,即使代码中有明显 BUG 说不准也能得满分。

另外,虽说题目是可以用堆、树等数据结构做的,但通常也是可以用动态规划和搜索解决的。考虑到即使计科院也是直到大二才真正接触数据结构,因此考察的倾向性应当是不涉及数据结构的算法,其中最主要的就是动态规划和搜索。不过显然你也可以用数据结构做,这当然不会扣分。也就是说实际上不学习数据结构也能很好地完成这张卷子。不过,使用动态规划/搜索的解法不一定比使用堆/树等数据结构的解法简单,考虑到动态规划确实需要一定的思维量,为了保险起见把数据结构也学一遍,应当是更稳妥的。

尽管如此,即使你完全没有学过算法方面的知识,也并不意味着你已经就与通过考试无缘。事实上能考到的算法题都是可以通过暴力得到一半分甚至大半分的,理想情况下即使对算法知识一无所知也可能只扣五六分。考试不会明着考算法题,例如直接在题目中出现诸如“二叉树逆置”这样的题目。不过确实不排除随着时间推移出的题难度越来越大真达到这种水平,这谁也说不准的。目前题目的倾向性确实是越来越困难,因此多准备些,总是不会错的。

个人建议,如果实在很担心因为对算法一无所知而过多丢分,可以看一下 Aditya Bhargava 编写的算法科普读物《算法图解》。虽然是很薄的一本科普性质的书,但对于考试应该是足够了。需要注意的是并不是说读完这本书就可以直接应付考试,你还得在 LeetCode 上多刷点题以巩固相关知识,否则该不会做还是不会做

最后更新于