CSP Wiki

权威高质量的免费学习资源,带你从零基础到 CSP 认证。QQ 交流群:166492147(获取更多资源与帮助)

云斗学院 倾力打造

特色内容

知识全面

覆盖 CSP 认证考试所有必备知识点

实例丰富

通过实际案例学习,理解算法原理

高效学习

突出重点概念,高效备战 CSP 考试

专业辅导

由经验丰富的信息学教师精心打造

普及组学习路径(该阶段学习要点)

数据结构

数据结构是 OI 竞赛中组织与存储数据的形式,可以说是 OI 竞赛最重要的基础之一。普及组的数据结构主要包括栈、队列、链表。

栈是 OI 中常用的一种线性数据结构。

队列

队列(queue)是一种具有「先进入队列的元素一定先出队列」性质的表。由于该性质,队列通常也被称为先进先出(first in first out)表,简称 FIFO 表。

链表

链表是一种用于存储数据的数据结构,通过如链条一般的指针来连接元素。它的特点是插入与删除数据十分方便,但寻找与读取数据的表现欠佳。

普及组常用 STL

在 OI 信息学竞赛中,STL(Standard Template Library,标准模板库)是一个强大且实用的工具,能显著提升编程效率。

基础

主要介绍了 OI 竞赛中复杂度的定义以及基础且常用的算法以及思想。

算法的定义和复杂度

算法通常用于解决特定的计算任务,但与可以直接在计算机上运行的程序不同,算法使用数学化的描述,更加侧重于思想,可以被看作抽象的程序。同一个算法可以有许多种不同的实现方式,两个不同的程序里也可能使用了同一种算法。

均摊复杂度

均摊分析(Amortized Analysis)是一种用于分析算法和动态数据结构性能的技术。它不仅仅关注单次操作的成本,还通过评估一系列操作的平均成本,为整体性能提供更加准确的评估。

枚举算法

枚举算法是信息学竞赛中最基础也最重要的算法之一,特别适合初学者掌握。本文将介绍枚举算法的基本概念、应用场景和实现技巧。

模拟算法

模拟就是用计算机来模拟题目中要求的操作。

递归算法

递归是信息学竞赛中最重要的基础算法思想之一,也是许多高级算法的基础。本文将系统讲解递归的原理、实现方法和应用技巧,帮助竞赛选手全面掌握这一关键算法。

分治算法

分治算法(Divide and Conquer)是一种重要的算法设计策略,它的基本思想是将一个规模较大的问题分解为若干个规模较小、相互独立且结构与原问题相似的子问题,然后递归地解决这些子问题,最后将子问题的解合并起来得到原问题的解。

贪心算法

在信息学竞赛(OI)中,贪心算法是一种高效且常用的算法策略。其核心思想是在每一个决策点都做出当下看起来最优的选择,期望通过一系列这样的局部最优选择,最终达到全局最优的结果。

基础排序算法

排序算法(英语:Sorting algorithm)是一种将一组特定的数据按某种顺序进行排列的算法。排序算法多种多样,性质也大多不同。

进阶排序算法

快速排序是一种基于分治思想的高效排序算法。

前缀和算法

前缀和算法是一种预处理技巧,用于快速计算数组中某个区间内元素的总和。

差分算法

差分算法是一种与前缀和算法紧密相关的算法,主要用于高效处理区间修改问题。

二分算法

二分查找是一种在有序数组中查找特定元素的高效算法。

搜索

搜索在 OI 竞赛中用于高效遍历或搜索图/树结构,通过逐层扩展节点确保最先找到目标的最短路径或最少操作步骤,常用于解决最短路径、连通性检测等最优化问题。

深度优先搜索

DFS 为图论中的概念,在 搜索算法 中,该词常常指利用递归函数方便地实现暴力枚举的算法,与图论中的 DFS 算法有一定相似之处,但并不完全相同。

宽度优先搜索

宽度优先搜索(BFS)是一种用于遍历或搜索树或图的算法。

图论

图论在 OI 竞赛普及组中用于将实际问题抽象为节点与边的关系。

图论基本概念

本页面概述了图论中的一些概念,这些概念并不全是在 OI 中常见的,对于 OIer 来说,只需掌握本页面中的基础部分即可,如果在学习中碰到了不懂的概念,可以再来查阅。

图的存储

本文默认读者已阅读并了解了 图论相关概念 中的基础内容,如果在阅读中遇到困难,也可以在 图论相关概念 中进行查阅。

树基础知识

图论中的树和现实生活中的树长得一样,只不过我们习惯于处理问题的时候把树根放到上方来考虑。这种数据结构看起来像是一个倒挂的树,因此得名。

树的遍历

在树上 DFS 是这样的一个过程:先访问根节点,然后分别访问根节点每个儿子的子树。

图上 DFS

DFS 全称是 Depth First Search,中文名是深度优先搜索,是一种用于遍历或搜索树或图的算法。

图上 BFS

BFS 全称是 Breadth First Search,中文名是宽度优先搜索,也叫广度优先搜索。

霍夫曼树与编码

霍夫曼树(Huffman Tree),又称最优二叉树,是一种带权路径长度(WPL)最短的二叉树。

动态规划

动态规划在 OI 竞赛普及组中通过拆解复杂问题为重叠子问题并构建状态转移方程,以递推方式高效求解最优化问题(如最长上升子序列、背包问题),是解决多阶段决策类题目的核心方法论。

动态规划基础

动态规划是一种通过分解问题、存储中间结果来高效解决复杂问题的算法思想。

递推

递推算法是信息学奥赛(OI)中一种基础且重要的算法思想。

线性序列 DP

线性序列 DP 是动态规划中最基础的题型之一,主要用于处理一维数组或字符串等线性结构的问题。

记忆化搜索

记忆化搜索是一种通过记录已经遍历过的状态的信息,从而避免对同一状态重复遍历的搜索实现方式。

背包 DP

在信息学竞赛(OI)里,01 背包问题是动态规划算法中的经典问题。

区间 DP

区间类动态规划是线性动态规划的扩展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的哪些元素合并而来有很大的关系。

有向无环图上 DP

DAG 即 有向无环图,一些实际问题中的二元关系都可使用 DAG 来建模,从而将这些问题转化为 DAG 上的最长(短)路问题。

数论

数论在 OI 竞赛普及组中通过研究整数性质及同余关系,为处理质数判断、模运算、加密算法等问题提供数学基础,是解决数位操作类题目的关键工具,同时强化逻辑推理能力。

数学符号和基础知识

在学习数学的过程中大家会见到许多复杂的公式符号。因此在学习具体内容之前,建议大家首先理解下列常见符号的含义。

快速幂

快速幂,二进制取幂(Binary Exponentiation,也称平方法),这个技巧也常常用在非计算的场景,因为它可以应用在任何具有结合律的运算中。

高精度算法

在平常的实现中,高精度数字利用字符串表示,每一个字符表示数字的一个十进制位。因此可以说,高精度数值计算实际上是一种特别的字符串处理。

公约数和公倍数

在信息学竞赛(OI)里,最大公约数(Greatest Common Divisor,简称 gcd)指的是两个或多个整数共有约数里最大的那个。

素数及唯一分解定理

在信息学竞赛所涉及的数学领域里,素数(也叫质数)是一类非常关键的数。

素数筛法

埃拉托斯特尼筛法(Sieve of Eratosthenes),简称埃氏筛,是一种用于找出一定范围内所有素数的经典算法。它的核心功能是高效地标记出指定区间内的合数,从而筛选出其中的素数。

组合数学基础

排列组合是组合数学中的基础。排列就是指从给定个数的元素中取出指定个数的元素进行排序;组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。排列组合的中心问题是研究给定要求的排列和组合可能出现的情况总数。排列组合与古典概率论关系密切。

综合练习赛

“四场综合练习赛,全面检验你在该阶段的学习成果。

综合模拟赛

“十五场综合的模拟赛,全面提升你的考试能力。