摘要: 博弈论 博弈论 NIM 博弈 台阶-Nim游戏 公平组合游戏ICG 有向图游戏 Mex 运算 SG 函数 有向图游戏的和 定理 集合-Nim游戏 拆分-Nim游戏 NIM 博弈 给定 $n$ 堆物品,第 $i$ 堆物品有 $A_i$ 个。两位玩家轮流操作,每次操作可以任选一堆,拿走任意数量的物品(可 阅读全文
posted @ 2022-12-10 09:35 S!no 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 背包问题 背包问题 0/1 背包问题 完全背包 多重背包 二进制拆分法 分组背包 背包是线性 DP 中一类重要而特殊的模型,本文将其作为单独一部分进行总结整理。 0/1 背包问题 0/1 背包问题的模型如下: 给定 $N$ 个物品,其中第 $i$ 个物品的体积为 $V_i$ ,价值为 $W_i$ 。 阅读全文
posted @ 2022-12-10 09:35 S!no 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 容斥原理 设 $S_1,S_2,\cdots,S_n$ 为有限集合,$|S|$ 表示集合 $S$ 的大小,则: $$ \vert \bigcup\limits_{i=1}^{n}S_i \vert = \sum\limits_{i=1}^{n} \vert S_i \vert - \sum\limi 阅读全文
posted @ 2022-12-10 09:34 S!no 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 组合计数 组合计数 求组合数 I —— 预处理组合数 求组合数 II —— 预处理阶乘 求组合数 III —— 卢卡斯定理(Lucas) 求组合数 IV —— 高精度 满足条件的01序列 —— 卡特兰数 求组合数 I —— 预处理组合数 给定 $n$ 组询问,每组询问给定两个整数 $a$,$b$,请 阅读全文
posted @ 2022-12-10 09:34 S!no 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 高斯消元 高斯消元 高斯消元解线性方程组 高斯消元解异或线性方程组 高斯消元解线性方程组 通过初等行变换把增广矩阵化为阶梯型矩阵,并回代得到方程的解 适用于求解 包含 $n$ 个方程,$n$ 个未知数的多元线性方程组 前置知识:初等行(列)变换 把某一行乘一个非00的数 (方程的两边同时乘上一个非0 阅读全文
posted @ 2022-12-10 09:34 S!no 阅读(61) 评论(0) 推荐(0) 编辑
摘要: 中国剩余定理 设 $m_1, m_2,\cdots, m_n$ 是两两互质的整数,$m = \prod_{i=1}^{n} m_i$ ,$M_i = m / m_i$(除了 $m_i$ 之外其他所有 $m$ 的乘积),$t_i$ 是线性同余方程 $M_it_i = 1 \pmod {m_i}$ 的一 阅读全文
posted @ 2022-12-10 09:34 S!no 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 扩展欧几里得算法 扩展欧几里得算法 欧几里得算法/辗转相除法(Euclidean algorithm) 裴蜀定理(Bézout 定理) 扩展欧几里得算法(Extended Euclidean algorithm) 求解线性同余方程 欧几里得算法/辗转相除法(Euclidean algorithm) 阅读全文
posted @ 2022-12-10 09:34 S!no 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 快速幂 快速幂 快速幂 快速幂求逆元 快速幂 用于快速(在 $O(\log k)$ 的时间复杂度之内)求出 $a^k \bmod p$ 的结果,$1 \le a,p,k \le 10^9$,核心是反复平方法。 算法思想: 预处理出这些值: $a^{2^0} \bmod p,a^{2^1} \bmod 阅读全文
posted @ 2022-12-10 09:34 S!no 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 欧拉函数 欧拉函数 用公式求欧拉函数 用筛法求欧拉函数 欧拉函数: 在数论中,对正整数 $N$,欧拉函数 $\varphi (N)$ 是小于等于 $N$ 的正整数中与 $N$ 互质的数的数目。 若正整数 $N$ 被唯一分解为 $N = p_1^{c_1}p_2^{c_2} \dots p_m^{c_ 阅读全文
posted @ 2022-12-10 09:33 S!no 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 约数 约数 约数的定义 算数基本定理的推论 正约数集合 正约数个数 正约数之和 一、试除法求约数 二、约数个数 三、约数之和 四、最大公约数 欧几里得算法 更相减损数 约数的定义 若整数 $n$ 除以整数 $d$ 的余数为 $0$,即 $d$ 能整除 $n$,则称 $d$ 是 $n$ 的约数,$n$ 阅读全文
posted @ 2022-12-10 09:33 S!no 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 质数 质数 一、试除法判定质数 二、分解质因数 三、筛质数 3.1 朴素筛法 3.2 埃氏筛法(Eratosthenes 筛法) 3.3 欧拉筛法(线性筛法) 一、试除法判定质数 质数的定义:若一个正整数无法被除了1和它自身之外的任何自然数整除,则称该数为质数(或素数),否则称该正整数为合数。 整个 阅读全文
posted @ 2022-12-10 09:33 S!no 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 匈牙利算法 给定一个二分图,如: 匈牙利算法能够快速的计算出一种匹配方式,使得匹配的数量最多。注意,一个成功的匹配方式中,没有两条边是共用了同一个点的。 形象的说,这个问题可以理解成二分图两边分别是男生和女生,有连线的表示可以凑成一对,匈牙利算法就是用来计算最多能够凑成多少对(不存在脚踏多条船的情况 阅读全文
posted @ 2022-12-10 09:33 S!no 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 染色法判定二分图 如果一张无向图的 $N$ 个节点($N \geq 2$)可以分成 $A,B$ 两个非空集合,其中 $A \cap B = \emptyset$,并且在同一集合内的点之间都没有边相连,那么称这张无向图为一张二分图。$A,B$ 分别称为二分图的左部和右部。 定理: 一张无向图是二分图, 阅读全文
posted @ 2022-12-10 09:33 S!no 阅读(169) 评论(0) 推荐(0) 编辑
摘要: Kruskal 算法 首先,将所有边按照权重从小到大排序。这一步是Kruskal算法的性能瓶颈,时间复杂度为 $O(m \log m)$ 。不过由于排序的时间复杂度常数很小,所以Kruskal算法实际上是很快的。 第二部从小到大枚举每条边 $a \rightarrow b$,边权为 $w$ ,如果 阅读全文
posted @ 2022-12-10 09:33 S!no 阅读(33) 评论(0) 推荐(0) 编辑
摘要: Prim 算法 Prim算法用于求最小生成树问题,与Dijkstra算法非常相似。根据图的疏密程度,分为朴素Prim算法(稠密图,$O(n^2)$)、堆优化Prim算法(稀疏图,$O(m\log n)$)。但对于稀疏图,Kruskal算法更好写,思路更加清晰简单,所以一般不使用堆优化Prim。本文我 阅读全文
posted @ 2022-12-10 09:32 S!no 阅读(143) 评论(0) 推荐(0) 编辑
摘要: Floyd 算法 Floyd 算法用于多源汇最短路问题。时间复杂度为 $O(n^3)$ 。 算法思想: 首先用邻接矩阵里的d[i][j]存储所有的边(重边的时候取min),然后就是三重循环,思路也是如果从i到k,再从k到j,这个距离(d[i][k] + d[k][j])能比d[i][j]小,就更新一 阅读全文
posted @ 2022-12-10 09:32 S!no 阅读(109) 评论(0) 推荐(0) 编辑
摘要: SPFA 算法 SPFA 算法 SPFA 求最短路 SPFA 判断负环 SPFA算法实际上是对Bellman-Ford算法的队列优化,也是用于在存在负权边的图上,求单源点最短路,一般情况下时间复杂度可以看作 $O(m)$ ,最坏情况下时间复杂度是 $O(nm)$ 。 虽然SPFA算法是对Bellma 阅读全文
posted @ 2022-12-10 09:32 S!no 阅读(120) 评论(0) 推荐(0) 编辑
摘要: Bellman-Ford 算法 Bellman-Ford算法用于在包含负权边的图上,求单源点最短路的问题,时间复杂度 $O(nm)$ 。但是因为该算法的改进版SPFA,在求单源点最短路的问题上几乎总是优于Bellman-Ford算法,所以Bellman-Ford算法一般只应用在对边的数量有限制的最短 阅读全文
posted @ 2022-12-10 09:32 S!no 阅读(129) 评论(0) 推荐(0) 编辑
摘要: Dijkstra 算法 Dijkstra算法用于在所有边权都非负的图上,求单源点最短路。 设 $n$ 是图上结点的数量,$m$ 是边的数量。 朴素Dijkstra算法的时间复杂度是 $O(n^2)$ ,适合稠密图(点少边多); 堆优化版的Dijkstra算法的时间复杂度是 $O(m\log n)$ 阅读全文
posted @ 2022-12-10 09:32 S!no 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 拓扑排序 计算拓扑序列的一个方式是,用BFS来尝试访问所有的节点,但是有一个约束就是只有入度为0的节点才能被加入到扩展队列里。每次从队列里取出一个节点,也就同时在图中将这个节点拆除,所以它的所有后继的节点都减少1,如果已经减少到0,那么就可以加入到队列中。 在上面的例子中,一开始只有a的入度是0,所 阅读全文
posted @ 2022-12-10 09:31 S!no 阅读(57) 评论(0) 推荐(0) 编辑