合集-学习笔记
摘要:1 随机化算法简介 随机化算法,是一种十分玄学的做法。 百度百科对其的定义是: 随机化算法(randomized algorithm),是这样一种算法,在算法中使用了随机函数,且随机函数的返回值直接或者间接的影响了算法的执行流程或执行结果。就是将算法的某一步或某几步置于运气的控制之下,即该算法在运行
阅读全文
摘要:1 计数原理和方法 1.1 加法原理 完成一件事情有 \(n\) 个办法,第一类方法有 \(n_1\) 个方案,第二类方法有 \(n_2\) 个方案,\(\cdots\),那么完成这件事共有 \(\sum\limits_{i=1}^nn_i\) 种方法。 1.2 乘法原理 完成一件事情有 \(n\)
阅读全文
摘要:1 事件与概率 1.1 相关概念 样本空间:某次随机试验的所有可能结果的集合,一般记为 $S$。 样本点:试验的每个结果,即 $S$ 中的元素。 事件:$S$ 的子集。 1.1.1 事件 基本事件:由一个样本点组成的只有一个元素的集合。 必然事件:在某种条件下必然会发生的事件。 不可能事件:在某种条
阅读全文
摘要:树链剖分 1 基础理论 1.1 基础概念 在树链剖分中,我们将会遇到如下的名词,在此先做以解释: 重儿子:对于一个子节点 \(u\) 如果 \(v\) 是其儿子,且 \(v\) 的子树大小是节点 \(u\) 的儿子中最大的,则称 \(v\) 是 \(u\) 的重儿子。 轻儿子:除了重儿子以外,就是轻
阅读全文
摘要:1 矩阵乘法 1.1 定义 对于两个矩阵 \(A,B\),其中 \(A\) 大小为 \(n\times m\) ,\(B\) 大小为 \(m\times p\),则这两个矩阵可以做乘法,得到的矩阵 \(C\) 的大小为 \(n\times p\)。 例如: \( A=\begin{bmatrix}
阅读全文
摘要:1 算法描述 在一图中,从一点出发,沿图的边走到另一点所经过的路径中,各边上权值和最小的路径,叫做最短路径。最短路算法就是求解最短路径问题的算法。 其中,单源最短路径指从图中某一点到另外所有点的最短路径;多源最短路径指从图中每一点到另外所有点的最短路径。 2 四大最短路算法 2.1 Floyd 算法
阅读全文
摘要:1 卡特兰数 1.1 概述 卡特兰数的前几项是 $1,1,2,5,14,42,132,429,1430,4862\cdots$。 卡特兰数在组合数学中有着许多应用。下面给出一个经典例子: 在网格中向右或向上走,从 $(0,0)$ 走到 $(n,n)$,并且不能越过对角线的路径条数。 该问题的结果就是
阅读全文
摘要:1 分块 1.1 概念简述 分块被称为 “优雅的暴力”。 对于一个区间 $[1,n]$,我们将其分成若干个块。在处理整块时直接维护整块信息,达到降低时间复杂度的目的。 对于常规分块,设块长为 $m$,则一般情况下 $m$ 取 $\sqrt{n}$ 时复杂度最优。 下面举几例来说明分块如何降低时间复杂
阅读全文
摘要:1 引入 对于传统 KMP,可以解决单模式串匹配的问题。 但是对于下面的问题,好像 KMP 就显得有些弱了: 给定 $n$ 个模式串 $s_i$ 和一个文本串 $t$,求有多少个不同的模式串在文本串里出现过。 那么对于这个问题,我们就要使用 AC 自动机求解。 2 实现 以上面的问题为例讲解 AC
阅读全文
摘要:1 二叉搜索树 1.1 定义 二叉搜索树(Binary Sort Tree,BST)是一种二叉树的树形数据结构,定义如下: 空树是一颗二叉搜索树。 若二叉搜索树的左子树不为空,则其左子树上的所有点的权值都小于根节点的值。 若二叉搜索树的右子树不为空,则其右子树上的所有点的权值都大于根节点的值。 二叉
阅读全文
摘要:1 哈希 1.1 概念 哈希就是构造一个数字使之唯一的代表一个字符串。 我们来考虑一下二进制数的转化: \((1001)_2=1\times 2^3+0\times2^2+0\times2^1+1=(9)_{10}\) 现在,我们令 \('a'=1,'b'=2,'c'=3\cdots,'z'=26\
阅读全文
摘要:1 同余 1.1 定义 若 \(a,b\) 为两个整数,且 \(a-b\) 能被自然数 \(m\) 整除,就说 \(a\) 和 \(b\) 关于模 \(m\) 同余,记作 \(a\equiv b\pmod{m}\)。 1.2 性质 同余有以下性质: 自反性: \(a\equiv a\pmod{m}\
阅读全文
摘要:1 Miller-Rabin 算法 1.1 引入 Miller-Rabin 的主要作用就是判断一个较大的数是不是质数。 那么根据基础数论中提到过的试除法,我们知道朴素去判断一个数是否是质数的复杂度是 \(O(\sqrt n)\) 的,在 \(n\ge 10^{18}\) 的时候就十分不优了。 而 M
阅读全文
摘要:1 前言 首先你需要掌握的前置知识:后缀自动机 SAM。 在那篇文章的 4.4 小节中,我们介绍了使用普通 SAM 求解多个串之间的最长公共子串的方法。实际上,这种做法并不是最正规的。对于多个串之间的子串问题,最常采用的数据结构是广义后缀自动机(广义 SAM)。 广义 SAM,顾名思义,即对多个字符
阅读全文
摘要:1 概述及定义 后缀自动机(SAM)是一个强有力的数据结构,可以解决很多经典字符串问题,例如: 线性复杂度进行字符串匹配。 线性复杂度求出一个字符串的所有不同子串个数。 那么我们定义一个字符串 \(S\) 的 SAM 是一个可以接受 \(S\) 所有后缀的最小 DFA(确定性有限状态自动机)。 也就
阅读全文
摘要:1 概述 回文自动机(PAM),是一种用于维护回文子串的自动机。与其他自动机类似的,它由转移边以及 fail 指针构成,上面的每一个节点都代表一个回文子串。 回文自动机的结构与 AC 自动机比较相似,下面详细讲解。 2 结构 首先我们的 PAM 要存储所有的本质不同回文子串,那么考虑到回文子串的长度
阅读全文
摘要:1 问题引入 给定一个长度为 \(n\) 的字符串 \(s\),请找出该字符串中所有的回文子串。 显然对于一个长度为 \(n\) 的字符串,其回文子串至多有 \(n^2\) 个,因此如果一个个统计复杂度必定不会优秀。 那如何优化复杂度呢?这就要提到 Manacher 算法了。在探讨这个算法之前,我们
阅读全文
摘要:1 概念 首先我们需要先定义后缀,这个其实很简单。我们定义后缀 \(i\) 表示以第 \(i\) 个字符开头的后缀,相当于 \(s[i,n]\)。 而后缀数组则主要关系到两个数组:\(sa\) 和 \(rk\)。其中 \(sa\) 表示将所有后缀按字典序排序后第 \(i\) 小的后缀的编号 (即后缀
阅读全文
摘要:1 问题概述 分数规划是用于求一类分式的极值问题。 给定两个数列 \(a_i,b_i\),求出一个数列 \(w_i\in \{0,1\}\),最小(大)化下列式子: \[\dfrac{\sum\limits_{i=1}^na_i\times w_i}{\sum\limits_{i=1}^nb_i\t
阅读全文
摘要:1 网络流基础概念 网络流的概念分为网络和流。 网络是指一种特殊的有向图 \(G=(V,E)\),每条边上有容量 \(c(u,v)\) ,同时还有源汇点 \(s,t\)。 对于一个网络,一个流 \(f\) 需要满足以下性质: 每条边上的流量 \(f(u,v)\) 不能大于它的容量 \(c(u,v)\
阅读全文
摘要:1 概念 在很多题目中,我们可以使用二分法来得出答案。但是如果说这一类题目有多次询问,并且多次询问分别二分会 TLE 时,我们就需要引入一个东西叫整体二分。 整体二分的主要思路就是将多个查询一起解决,因此它是一种离线算法。 整体二分的具体操作步骤如下: 首先记 \([l,r]\) 为答案的值域,\(
阅读全文
摘要:1 概念 cdq 分治,是一种分治思想而非具体算法。它是基于分治思想,将复杂的问题拆分求解。 与一般分治算法不同的是,一般分治所拆分的子问题互相独立、互不干扰、形式与原问题一致。而在 cdq 分治中,每次划分出的两个子问题,是利用前面的子问题解决后面的子问题。也就是说,对于序列 \([l,r]\),
阅读全文
摘要:1 点分治概念 点分治是树分治的一种,主要用于处理树上路径问题。 注意这颗树不需要有根,即这是一颗无根树。 下面以例题分析点分治的基本思想。 2 点分治实现 2.1 思想 首先你需要会的前置知识:树的重心。 我们来看这样一道例题:【模板】点分治 : 给出一颗无根树,有边权,询问树上是否存在距离为 \
阅读全文
摘要:1 引入 首先看这样一道题:[SDOI2011] 消耗战 有一棵树,边上有边权。每次询问给出 \(k\) 个点,找到一些边,使得删去这些边后从 \(1\) 号节点无法达到这 \(k\) 个点中任意一个,同时使边权最小。 显然这是一道树形 dp。如果说只给我们一次询问,可以很简单的 \(O(n)\)
阅读全文
摘要:1 概念 扫描线一般运用在图形上面,其含义就是拿一条线在图形上扫,然后维护信息得到答案。 通常情况下,扫描线被用于求面积、周长问题。 2 矩形面积并 2.1 思路 先给出例题:【模板】扫描线 考虑我们所学的求不规则图形面积的方式,无外乎割补。然而补似乎太难实现,因此考虑割。 如下图: 那么我们考虑怎
阅读全文
摘要:1 定义 笛卡尔树是一种二叉树,每一个节点由二元组 \((k,w)\) 组成。要求 \(k\) 满足二叉搜索树的性质,\(w\) 满足堆的性质。 当 \(k,w\) 都确定,且 \(k,w\) 互不相同时,笛卡尔树的结构是唯一的,如图: 看到这个定义,会发现与 Treap 十分相似。 实际上,Tre
阅读全文
摘要:1 基环树概念 1.1 定义 首先,基环树并不是一颗严格的树。它是一张由 \(n\) 个节点,\(n\) 条边组成的图。 1.2 无向联通图上的基环树 首先,一棵树有 \(n\) 个节点,\(n-1\) 条边。那么基环树就可以看做是在一棵树上加了一条边,这样多出了一个环(因此基环树也被称作环套树)。
阅读全文
摘要:树哈希 1.1 定义 1.1.1 同构树 我们定义,如果两颗有根树,交换其中节点的儿子后,两棵树形态一致,称这样的两棵树为同构树。 树哈希能做的就是判断两棵树是否同构。 1.1.2 哈希方法 树哈希十分灵活,也就是说你可以设计出你自己的哈希方式。但是显然,你设计的并不一定能满足正确性,可能被卡掉。
阅读全文
摘要:1 数论分块 数论分块是莫比乌斯反演的前置知识之一,其主要用于快速求解一些含有除法向下取整的和式,例如 \(\sum \lfloor\dfrac ni \rfloor\)。我们的主要思路是,由于 \(\lfloor\dfrac ni \rfloor\) 中有大量值相同,所以可以将这些值一样的部分放在
阅读全文
摘要:1 基础概念 二分图的概念在网络流学习中其实已经有所涉及。具体来讲,二分图就是节点由两个集合组成,且两个点集内部没有边的图。 那么二分图有以下经典性质:二分图中没有奇环。 证明显然。由于每一次走边一定是从一个点集走到另一个点集,如果要回到当前点集,那么必须要走偶数条边,因此二分图中没有奇环。 那么我
阅读全文
摘要:1 问题 我们知道带权无向图上有一个经典问题:最小生成树。那么如果换成带权有向图呢? 对于一个带权有向图,从中选出一个子图,使得该子图中无环,且存在一个点可以到达其他所有点,则这个子图就是一个树形图。而求出所有树形图中选出边权和最小的一种选法,就是最小树形图问题。 容易想到,解决最小生成树的两种方法
阅读全文
摘要:1 问题引入 给定一个无向图,定义如下概念: 团:节点之间两两相连的子图。 极大团:不能再继续扩大的团。 最大团:一张无向图中最大的极大团。 现在的问题是怎样求出一个图的最大团。实际上这个问题是 NP-hard 的,也就是没有多项式解法。但是有复杂度较为优秀的指数级算法。 主流算法有两种:状压 dp
阅读全文
摘要:1 积性函数和狄利克雷卷积 1.1 积性函数 1.1.1 定义 积性函数在以前的学习中遇到过很多,例如莫比乌斯函数 \(\mu(n)\),欧拉函数 \(\varphi(n)\) 等等。那么我们对积性函数定义如下: 称定义域在正整数上的函数叫做数论函数(也叫算数函数)。 对于一个数论函数 \(f(n)
阅读全文
摘要:1 引入 众所周知,给定二维平面上的任意 \(n\) 个点,一定会有一个不超过 \(n-1\) 次的多项式与之对应。那么假如给出 \(n\) 个点,需要找到一个多项式 \(f(x)\) 使其对应,这个过程就是多项式插值。 而拉格朗日插值就是求解多项式插值的一种插值法。 2 拉格朗日插值 2.1 朴素
阅读全文
摘要:线段树作为一种扩展性极强、复杂度优秀的数据结构,除了常规用法外还被开发出了很多其他的用途。本文将列举几种扩展用途及其应用。 0 基本操作 0.1 权值线段树 正常的线段树是维护区间上每一个点的值,而权值线段树则是维护每一个数字出现的次数(可以类比为桶)。 例如原本的 \(1-4\) 表示区间 \([
阅读全文
摘要:所谓持久化,就是可以保留每一个历史版本,并且支持操作的不可变特性。例如对于线段树而言,持久化意味着它可以保留多个历史版本的线段树,并且支持对历史版本的访问与修改。 本文将介绍几种常见数据结构的持久化方式。 1 持久化线段树 1.1 基本思想 保存每一个历史版本的线段树本身是简单的,直接开一堆线段树就
阅读全文
摘要:1 引入 \(\text{K-D Tree}\) 是一种高效处理 \(k\) 维空间信息的数据结构。具体的讲,它维护了 \(k\) 维空间中 \(n\) 个点的信息,并且拥有二叉搜索树的形态。 在 \(n\) 远大于 \(2^k\) 时 \(\text{K-D Tree}\) 有较好的时间效率,一般
阅读全文
摘要:1 群论基础 1.1 群的定义 若集合 \(S\ne \varnothing\) 和 \(S\) 上的二元运算 \(\cdot\) 构成的代数结构 \(G(S,\cdot)\) 满足以下性质: 封闭性:\(\forall a,b\in S,a\cdot b\in S\)。 结合律:\(\forall
阅读全文
摘要:1 概念 线性基通常情况下指的是异或空间线性基。其标准定义是对于一个数集 \(S\),以异或运算张成的数集与 \(S\) 相同的极大线性无关集。通俗的讲就是对于一个数集 \(S\),线性基生成了一个集合,该集合中任意一些数的异或值组成的数集与 \(S\) 中任意一些数的异或值组成的数集相同,且该集合
阅读全文
摘要:1 概念 替罪羊树是一种平衡树,它维护平衡的方式不是旋转或者随机权值,而是最简单的暴力重构。当在插入和删除的时候发现某个节点子树失衡就暴力拍平重构,如此保证均摊复杂度 \(O(\log n)\)。 当然这种思想不止运用在平衡树中,还用于重构其它的数据结构。 2 基本操作 2.1 重构 既然是替罪羊树
阅读全文
摘要:1 概述 首先我们需要知道一类问题,在这类问题中我们需要维护一个森林,支持加边和删边操作,然后要求维护树上的一些信息。这类问题称为动态树问题。 而 LCT,即 Link-Cut Tree,就是用于解决动态树问题的一种数据结构。它可以以 \(O(n\log n)\) 的均摊复杂度解决这类问题。 学习
阅读全文
摘要:1 引入 插头 dp 是一种基于连通性状态压缩的动态规划,这一类问题要求我们记录元素的联通状况,例如在棋盘上走出一条回路等。此时朴素的状压 dp 难以处理,所以需要引入插头 dp 帮助我们求解。 开始前需要了解两个基本概念: 轮廓线:已决策状态和未决策状态的分界线。 插头:对于四连通的网格来讲,每一
阅读全文
摘要:1 阶 1.1 定义 由欧拉定理可知,对于 \(a\in\mathbb{Z},m\in \mathbb{N}^+\),如果 \(\gcd(a,m)=1\),则 \(a^{\varphi(m)}\equiv 1\pmod m\)。 因此满足同余式 \(a^n\equiv 1\pmod m\) 的最小正
阅读全文
摘要:多项式算法作为 OI 中较为困难的部分,其包含的知识是比较丰富的。本文将介绍多项式算法的基础——多项式乘法。 1 快速傅里叶变换 FFT 1.1 引入 首先我们知道一个多项式 \(f(x)\) 可以写作: \[f(x)=\sum_{i=0}^n a_ix^i \]那么我们如果想对两个多项式做乘法,会
阅读全文
摘要:1 上升幂和下降幂 1.1 定义 我们定义上升幂 \(n^{\overline{m}}\) 和下降幂 \(n^{\underline{m}}\) 如下: \[\begin{aligned} n^{\overline{m}}=\prod _{i=n}^{n+m-1}i=\dfrac {(n+m-1)!
阅读全文
摘要:1 二项式反演 1.1 引入 二项式反演与容斥原理有着很大的联系,在很大程度上二项式反演可以实现容斥的效果。 我们先从基础的容斥原理讲起,首先二元的容斥形式非常简单,如下: \[|A\cup B|=|A|+|B|-|A\cap B| \]更一般的,我们有: \[|A_1\cup A_2\cup\cd
阅读全文
摘要:1 引入 Min-Max 容斥,又称最值反演,是一种用于特定集合在已知最大值或最小值的情况下求另一者的算法。 举个例子来讲,我们不难注意到以下式子: \[\max(a,b)=a+b-\min(a,b) \]这就是 Min-Max 容斥的二元基本形式。容易发现,只要我们对所有数取相反数,那么用最小值求
阅读全文
摘要:1 定积分 在学习辛普森积分之前,我们需要了解一些基本的积分知识。 1.1 定义 设函数 \(f(x)\) 在区间 \([a,b]\) 上有界,在 \([a,b]\) 中插入若干个分点 \(a=x_0<x_1<\cdots<x_n=b\),将区间 \([a,b]\) 分成 \(n\) 个小区间,每个
阅读全文
摘要:前置知识:积性函数,数论分块。 1 概述 前面我们学习过杜教筛,它可以在亚线性的复杂度内求出一些数论函数的前缀和。而 Min_25 筛同样可以在亚线性复杂度内求出一些积性函数的前缀和。 考虑我们朴素的筛法求积性函数值无法低于线性复杂度的原因就是其必须枚举区间内的每一个数,而 Min_25 筛则是将区
阅读全文
摘要:1 概念 凸包指的是在平面上能包含所有给定点的最小凸多边形,可以理解为用一根绳子圈住所有点构成的一个多边形。而一个凸包又可以看做是上下两个部分组成,也就是常说的上凸壳和下凸壳。 实际操作中,我们很难直接维护出一整个凸包,所以一般分为上下凸壳进行维护。 2 维护方法 凸包的维护方法有很多种,在静态、动
阅读全文
摘要:1 概念 有这样一类问题,给出 \(n\) 个布尔变量 \(a_i\),并且给出若干限制条件,每一个限制条件形如 \((\bigvee\limits_{i=1}^k a_{p_i}=x_i)=\text{true}\)。问是否存在一种可行解。这被称之为 k-SAT 问题,当 \(k>2\) 时这个问
阅读全文
摘要:曾经有人说过自己这辈子不会遇到多项式科技,所以他没有学,直到模拟赛遇到了多项式开根。 本文将依托多项式乘法,介绍几种常见的多项式科技。因为笔者太菜,所以学的不多,以后可能会补充。 1 多项式乘法逆 1.1 过程 模板题:【模板】多项式乘法逆。 我们现在要求出 \(F\) 在模 \(x^n\) 意义下
阅读全文
摘要:矩阵树定理,又称 Matrix-Tree 定理,是用于解决图上生成树问题的有力工具。其基础是基于线性代数中的矩阵和行列式进行计算。 1 基本定义 1.1 图的关联矩阵 我们先来研究无向图的情况。设一张无向图 \(G=(V,E)\),\(|V|=n,|E|=m\),我们给每一条边随意定一个方向,然后定
阅读全文
摘要:1 决策单调性的定义 1.1 四边形不等式 首先我们定义一个函数 \(w(i,j)\),如果 \(\forall a,b,c,d \in \mathbb{Z}\),满足 \(a\le b\le c\le d\),都有 \(w(a,d)+w(b,c)\ge w(a,c)+w(b,d)\),则称函数 \
阅读全文

浙公网安备 33010602011771号