刷题词汇简单整理
TLE(Time Limit Exceeded):如果流程没有错误就是一些隐式竞赛技巧没有用上,例如开平方。
Memory Limit Exceeded:一般这种错误在Java里就是流程没有想清楚,在Python那里有可能是一些隐式编程技巧没用上,例如隐式要求递归变DP。
递归:递归再生或者复用for循环和代码块是一种metaprogramming的思想,有一点玄,也像哲学的metaphysics。避免递归的方法该是刷iterative的树遍历。
状态转移:就是状态的转移,在小霸王游戏机的体现最为明显,只能上下左右的转移状态。
BFS:所谓广搜,例如坐公车和地铁。也有状态转移。
DFS:所谓深搜,例如爬楼梯。有状态转移。
Time Complexity:O(2n)和O(n)是一样的。所以平行的for循环不会增加时间复杂度。这个时候就可以考虑多写一点增加代码的可读性。
Space Complexity:注意哲学上空间和时间有联系。简单的说有了S(n)的空间就不会没有O(n)的时间。例如传参的时候有了n个数长的数组也是花了最少n个单位的时间组装出来的。
分治:一般是说有返回值的递归,还要造个对象才能保存叶子节点的状态返回到当前节点的上一层。简单的说还是DP。至于对象如何造就靠刷题了。道理在于递归返回到最近公共祖先节点。题目之间有联系,短时间看不出来。如何非递归做分治的题目还得想想。最简单的例子当然还是Fibonacci数列的DP。
连续:英文的consecutive,避免continuous和epsilon。刷题里一般是在说prefix tree。解题一般用prefix sum。
区间:就是小学的数学概念。但是在刷题那里要往segment tree和binary indexed tree上想。
单链表:是一个只有一个子树的树。和N叉树相对应。目前不叫树。叫链表了。有时分治的写法可以巧妙地避开反复声明变量。例如用递归做阶乘。刷题现在不考虑反复声明变量的事情。作为自己练习用。
矩阵:矩阵是个树形结构。可以是一个整齐的树,也可以前缀树,还可以是线段树。
for循环:for循环自带了ordering可用可不用。例如背包问题枚举了所有的动态所以不用对物品排序。强调ordering在Advanced Calculus 1。
总的来说,树形结构的问题清楚了就是游戏的问题。游戏里除了树人还有石头人。注意雅思有企业用的General版本。可以考虑一下。托福暂时还没有这种区分。能说就行。
#面经#