针对于两个组别:
必考点:计算机知识、数学知识、基本算法、程序的理解与实现。
其中,计算机知识属于常识,此处就不细说,最重要的是扎实。
数学知识
1. 时间复杂度
解决递归式子的时间复杂度问题,一个重要的定理就是 主定理(Master Theorem)。
常见题型就是求 $T(n)=aT(frac{n}{b})+f(n)$ 的 $T$ 的时间复杂度。
例子:求以下式子的时间复杂度
$$T(n)=left{
egin{aligned}
& 1 & n=1\
& 2Tleft(frac{n}{2}
ight)+1 & n >1\
end{aligned}
ight.
$$
根据主定理一:
- 若 $f(n)=O(n^{log_{b}a-epsilon})$,且 $epsilon>0$,那么时间复杂度就是 $Theta(n^{log_{b}a})$。
此处 $a=b=2$,且 $f(n)=O(1)$,易得 $epsilon=1>0$ 符合条件,所以时间复杂度为 $Theta(n^{log_{2}2})$ 即 $Theta(n)$。
当然这题因为很特殊,你可以把它想一个分治算法,将每个区间拆成 $2$ 分解决,最后合并。
所以每个点都会经过一遍,每个点所花费的复杂度为 $O(1)$,总时间复杂度为 $Theta(n imes 1)$ 即 $Theta(1)$。
2. 质数与筛法
各个筛法时间复杂度:
- 暴力枚举 $O(n sqrt n)$;
- 埃拉托色尼筛法 $O(n log log n)$;
- 欧拉筛法 $O(n)$。
而欧拉筛法可以顺带求出 $φ$ 函数,时间复杂度也是 $O(n)$。