CSP初赛知识点梳理

159号程序员

2021-08-15 22:47:33

Algo. & Theory

\large\texttt{前言}

本文适合普及组到提高组的同学学习,并且尽量做到优秀的排版和通俗易懂,少用缩写。

本文设定为读者已经学习过C++语法、基础算法(如排序)、各种计算机基础名词、小学~初中数学

本文的写作顺序为由易至难,笔者按照自己的理解给知识点分了难度。

标有 \checkmark 的为常考/出现过;标有“补”为拓展内容,只需了解;标有 \bigstar每年几乎必考,加粗的内容为提炼过后的重点。

建议先预习CSP 2020 入门组第一轮/CSP 2020 提高组第一轮/CSP 2020 第一轮(初赛)模拟的前 15 题。

迄今为止,初赛分为两个部分:

  1. 基础题:考察计算机科学和算法的基础,或许会有一些简单的数学。共 15 题。
  2. 程序题:读程序写结果(3 题)+补全程序(2 题),难度依次递增。

这里只介绍基础题的部分,程序题由于知识点过散,需要大家自己多做题,多看代码,缕清思路。

如果有对文章的建议/问题勘误均欢迎私信或在下方留言!

本 blog 目前只发布在洛谷上,不接受任何形式的转载/抄袭,除非得到原作者 @159号程序员 的许可。

\Large\mathtt{\text{CSP初赛知识点梳理}} \mathtt{CSP\,\,\,PRE-KNOWLEDGE} \tiny \text{Last update on Sep 15th, 2023} \tiny\text{本文内容较多,如果是想查找某一个特定的词语,可以在浏览器中使用 Ctrl + F 进行页面内搜索。} \large\texttt{计算机} \large\texttt{数据结构} \large\texttt{数学} \large\texttt{复杂度}

一个问题有很多种不同的算法,如何评价一个算法的好坏呢?这就需要时间复杂度和空间复杂度来衡量了。

1.T(n)=2T(\frac n2)+n\log n =4T(\frac n4)+2\times\frac n2\log \frac n2+n\log n =8T({n\over8})+n\log{n\over4}+n\log{n\over2}+n\log n =\dots T(n)=\sum_{i=0}^{\log n}n\log\frac n{2^i} =n\sum_{i=0}^{\log n}\log\frac n{2^i} =n\sum_{i=0}^{\log n}\log2^i =n\sum_{i=0}^{\log n}i =\Theta(n\log^2n) 2.T(n)=T(n/2)+n\log n =T(n/4)+\frac{n}{2}\log \frac{n}{2}+n\log n =n\log n+\frac{n}{2}\log \frac{n}{2}+\frac{n}{4}\log \frac{n}{4}+\frac{n}{8}\log \frac{n}{8}+\ldots \text{上式}\ge n\log n \text{上式}\le n\log n+\frac{n}{2}\log {n}+\frac{n}{4}\log {n}+\frac{n}{8}\log {n}+\ldots=2n\log n \therefore\quad=\Theta(2n\log n)=\mathcal{O}(n\log n)

虽然此方法计算量较大,但是是初学者不二的选择。如果追求卷面,可以学习主定理。

\large\texttt{排序算法}

初赛里常考的的排序大多分为 8 种:选择排序、冒泡排序、插入排序、快速排序、希尔排序、堆排序、归并排序、基数排序。

\begin{matrix} &\text{选择排序}&\text{冒泡排序}&\text{插入排序}&\text{快速排序}&\text{希尔排序}&\text{堆排序}&\text{归并排序}&\text{基数排序}&\\ \text{一般情况}&\mathcal{O}(n^2)&\mathcal{O}(n^2)&\mathcal{O}(n^2)&\mathcal{O}(n\operatorname{log}n)&\mathcal{O}(n^{1.3})&\mathcal{O}(n\operatorname{log}n)&\mathcal{O}(n\operatorname{log}n)&\mathcal{O}(d(n+r))\\ \text{最坏情况}&\mathcal{O}(n^2)&\mathcal{O}(n^2)&\mathcal{O}(n^2)&\mathcal{O}(n^2)&&\mathcal{O}(n\operatorname{log}n)&\mathcal{O}(n\operatorname{log}n)&\mathcal{O}(d(n+r))\\ \text{最好情况}&\mathcal{O}(n^2)&\mathcal{O}(n)&\mathcal{O}(n)&\mathcal{O}(n\operatorname{log}n)&&\mathcal{O}(n\operatorname{log}n)&\mathcal{O}(n\operatorname{log}n)&\mathcal{O}(d(n+r))\\ \text{空间复杂度}&\mathcal{O}(1)&\mathcal{O}(1)&\mathcal{O}(1)&\mathcal{O}(n)&\mathcal{O}(1)&\mathcal{O}(1)&\mathcal{O}(n)&\mathcal{O}(r)\\ \text{稳定性}&\text{不稳定}&\text{稳定}&\text{稳定}&\text{不稳定}&\text{不稳定}&\text{不稳定}&\text{稳定}&\text{稳定}\\ \end{matrix}

基于比较:通过比较元素来排序数列,如冒泡排序,快速排序等。

不基于比较:不比较元素,通过其他方法(如hash)来进行排序,如基数排序等。

\large\texttt{杂项} \large\texttt{参考文献及鸣谢} \tiny \text{(以上排名不分先后)}

以上就是 \text{CSP}\mathbb{\text{初赛知识点梳理}} 的全部内容了,如果有问题欢迎在下方留言哦!

\tiny 2021,\text{洛谷}\ \text{Developed by 159号程序员}