扩大
缩小

CSP 初赛小复习

针对于两个组别:

必考点:计算机知识、数学知识、基本算法、程序的理解与实现。

其中,计算机知识属于常识,此处就不细说,最重要的是扎实。

数学知识

1. 时间复杂度

解决递归式子的时间复杂度问题,一个重要的定理就是 主定理(Master Theorem)

常见题型就是求  $T(n)=aT(\frac{n}{b})+f(n)$ 的 $T$ 的时间复杂度。

例子:求以下式子的时间复杂度

$$T(n)=\left\{
\begin{aligned}
& 1 & n=1\\
& 2T\left(\frac{n}{2}\right)+1 & n >1\\
\end{aligned}
\right.
$$

根据主定理一:

  • 若 $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 \times 1)$ 即 $\Theta(1)$。

2. 质数与筛法

各个筛法时间复杂度:

  • 暴力枚举 $O(n \sqrt n)$;
  • 埃拉托色尼筛法 $O(n \log \log n)$;
  • 欧拉筛法 $O(n)$。

而欧拉筛法可以顺带求出 $φ$ 函数,时间复杂度也是 $O(n)$。

posted @ 2020-10-02 11:44  HoshizoraZ  阅读(215)  评论(0)    收藏  举报