edit 数学,数据结构

This commit is contained in:
2024-10-07 20:19:30 +08:00
parent 76e9b1e8c0
commit 76e934f733
3 changed files with 102 additions and 110 deletions
+2 -7
View File
@@ -139,19 +139,14 @@
"label": ""
},
{
"line": 14,
"line": 19,
"column": 17,
"label": ""
},
{
"line": 25,
"line": 29,
"column": 16,
"label": ""
},
{
"line": 30,
"column": 17,
"label": ""
}
]
}
+33 -31
View File
@@ -14,22 +14,22 @@
- [P1725题解](#p1725题解)
- [P1725代码](#p1725代码)
- [单调栈](#单调栈)
- [单调栈例题](#单调栈例题)
- [并查集](#并查集)
- [并查集基础](#并查集基础)
- [并查集查询](#并查集查询)
- [并查集合并](#并查集合并)
- [带权并查集](#带权并查集)
- [带权并查集例题](#带权并查集例题)
- [P2024 NOI2001食物链](#p2024-noi2001食物链)
- [P2024题解](#p2024题解)
- [可撤销并查集](#可撤销并查集)
- [并查集例题](#并查集例题)
- [并查集例题1](#并查集例题1)
- [并查集例题1题解](#并查集例题1题解)
- [并查集例题2](#并查集例题2)
- [并查集例题2题解](#并查集例题2题解)
- [并查集例题3](#并查集例题3)
- [并查集例题3题解](#并查集例题3题解)
- [并查集查询](#并查集查询)
- [并查集合并](#并查集合并)
- [带权并查集](#带权并查集)
- [带权并查集例题](#带权并查集例题)
- [P2024 NOI2001食物链](#p2024-noi2001食物链)
- [P2024题解](#p2024题解)
- [可撤销并查集](#可撤销并查集)
- [并查集例题](#并查集例题)
- [并查集例题1](#并查集例题1)
- [并查集例题1题解](#并查集例题1题解)
- [并查集例题2](#并查集例题2)
- [并查集例题2题解](#并查集例题2题解)
- [并查集例题3](#并查集例题3)
- [并查集例题3题解](#并查集例题3题解)
- [](#堆)
- [线段树](#线段树)
- [树状数组](#树状数组)
@@ -234,27 +234,29 @@ int main()
## 单调栈
### 单调栈例题
类似于单调队列,每次向单调栈中插入一个元素,就要 pop 掉栈顶小于这个元素的值,再插入。与单调队列不同的是,单调栈不支持从底部弹出。
---
## 并查集
### 并查集基础
#### 并查集查询
### 并查集查询
对于给定的 $a$,沿着树向上移动知道根节点即可。在合并的过程中的每个节点都属于这个集合,所以将父亲节点直接设为根即可。
#### 并查集合并
### 并查集合并
合并两个集合时,可以将一个集合的根节点设为另一个集合的根节点。为了防止退化,可以将节点较少或深度较小的一棵树连接到令一颗上,这种合并方法称作按秩合并。
### 带权并查集
## 带权并查集
我们可以在并查集的边上维护某种值,在路径压缩时产生运算。
#### 带权并查集例题
### 带权并查集例题
##### P2024 NOI2001食物链
#### P2024 NOI2001食物链
[题目链接](https://www.luogu.com.cn/problem/P2024)
@@ -275,7 +277,7 @@ int main()
你的任务是根据给定的 $N$ 和 $K$ 句话,输出假话的总数。
###### P2024题解
##### P2024题解
考虑维护带权并查集,对每次给定的话进行查询与合并。
@@ -285,7 +287,7 @@ int main()
![alt text](image.png)
### 可撤销并查集
## 可撤销并查集
对于一开始相互独立的 $n$ 个点,维护以下两种操作共 $q$ 次:
@@ -298,9 +300,9 @@ int main()
因为要保证可逆,所以不能路径压缩,只能启发式合并。
### 并查集例题
## 并查集例题
#### 并查集例题1
### 并查集例题1
有 $n$ 个点,初始时均为孤立点。
@@ -310,13 +312,13 @@ int main()
$1 \le n, m, q \le 10^5$
##### 并查集例题1题解
#### 并查集例题1题解
考虑对于每一次合并的 $a_i, b_i$,若两个点不联通,则在另外一颗树中连接 $a_i, b_i$,边权为 $i$。
每次查询就是在令一颗树中找到 $u, v$ 路径上边权最大值,可以使用树上倍增维护。
#### 并查集例题2
### 并查集例题2
有一个长度为 $n$ 的 $01$ 序列 $a_1, \dots, a_n$,一开始全是 $0$。接下来进行如下 $m$ 次操作:
@@ -325,7 +327,7 @@ $1 \le n, m, q \le 10^5$
$1 \le n, m \le 10^6$
##### 并查集例题2题解
#### 并查集例题2题解
建立并查集,使得 $i$ 所在联通块的根节点为 $i$ 后面第一次出现 $0$ 的位置,初始 $f_i = i$
@@ -333,7 +335,7 @@ $1 \le n, m \le 10^6$
每次查询输出 $x$ 的祖先。
#### 并查集例题3
### 并查集例题3
给定一颗 $n$ 个节点的树,接下来有 $m$ 次操作:
@@ -344,7 +346,7 @@ $1 \le n, m \le 10^6$
$1 \le n, m \le 10^6$
##### 并查集例题3题解
#### 并查集例题3题解
前置知识:[强联通分量](../4.树上问题及图论/树上问题及图论.md#强联通分量)
+67 -72
View File
@@ -3,22 +3,22 @@
待办:修改格式
- [数学](#数学)
- [费马小定理,逆元,同余](#费马小定理逆元同余)
- [初等数论](#初等数论)
- [同余](#同余)
- [同余的表示](#同余的表示)
- [同余的性质](#同余的性质)
- [费马小定理](#费马小定理)
- [裴蜀定理](#裴蜀定理)
- [逆元](#逆元)
- [求解逆元](#求解逆元)
- [线性求解逆元](#线性求解逆元)
- [费马小定理,逆元,同余例题](#费马小定理逆元同余例题)
- [逆元例题](#逆元例题)
- [B3717 组合数问题](#b3717-组合数问题)
- [B3717题解](#b3717题解)
- [P3403 跳楼机](#p3403-跳楼机)
- [P3403题解](#p3403题解)
- [P3403代码](#p3403代码)
- [欧几里得算法和中国剩余定理](#欧几里得算法和中国剩余定理)
- [欧几里得算法](#欧几里得算法)
- [前置知识:裴蜀定理](#前置知识裴蜀定理)
- [扩展欧几里得](#扩展欧几里得)
- [扩展欧几里得参考代码](#扩展欧几里得参考代码)
- [欧几里得算法例题](#欧几里得算法例题)
@@ -37,27 +37,26 @@
- [扩展(EXCRT):模数不互质](#扩展excrt模数不互质)
- [EXCRT两个方程](#excrt两个方程)
- [EXCRT多个方程](#excrt多个方程)
- [组合数学与矩阵初步](#组合数学与矩阵初步)
- [组合数学部分](#组合数学部分)
- [组合数的定义](#组合数的定义)
- [离散与组合数学](#离散与组合数学)
- [多重集合](#多重集合)
- [组合数](#组合数)
- [组合恒等式](#组合恒等式)
- [二项式定理](#二项式定理)
- [二项式反演](#二项式反演)
- [矩阵部分](#矩阵部分)
- [矩阵简介](#矩阵简介)
- [矩阵加减法](#矩阵加减法)
- [矩阵数乘](#矩阵数乘)
- [矩阵转置](#矩阵转置)
- [矩阵乘法](#矩阵乘法)
- [二项式定理](#二项式定理)
- [二项式反演](#二项式反演)
- [线性代数](#线性代数)
- [向量](#向量)
- [向量的运算](#向量的运算)
- [矩阵](#矩阵)
- [矩阵的运算](#矩阵的运算)
- [行列式](#行列式)
- [$n$ 阶行列式](#n-阶行列式)
- [行列式的意义](#行列式的意义)
- [组合数学与矩阵初步例题](#组合数学与矩阵初步例题)
- [矩阵例题](#矩阵例题)
- [P1962 斐波那契数列](#p1962-斐波那契数列)
- [P1962矩阵解法](#p1962矩阵解法)
- [P1962非矩阵解法](#p1962非矩阵解法)
## 费马小定理,逆元,同余
## 初等数论
### 同余
@@ -91,6 +90,18 @@ $$
a \pm c \equiv b \pm d \pmod m, a \times c \equiv b \times d \pmod m
$$
### 费马小定理
对于正整数 $a$ 和质数 $p$,若 $a$ 不能被 $p$ 整除,则 $a^{p - 1} \equiv 1 \pmod p$
费马小定理可以用于求解逆元,见[求解逆元](#求解逆元)
### 裴蜀定理
$a, b$ 为非零整数,设 $d = \gcd(a, b)$,则方程 $ax + by = m$ 有解当且仅当 $m$ 为 $d$ 的倍数。
要求解这个方程,可以使用[扩展欧几里德算法](#扩展欧几里得)
### 逆元
当 $ab \equiv 1 \pmod m$,则称在模 $m$ 意义下 $a, b$ 互为逆元。
@@ -139,7 +150,7 @@ $$
而因为 $1 \le (n \bmod x) \le x$,则一定可以从已有的值推出 $x^{-1}$
### 费马小定理,逆元,同余例题
### 逆元例题
#### B3717 组合数问题
@@ -242,33 +253,17 @@ signed main()
}
```
---
## 欧几里得算法和中国剩余定理
### 欧几里得算法
对于任意的正整数 $a \ge b$,若 $a \equiv 0 \pmod b$ $\gcd(a, b) = b$,否则令 $a = kb + a \bmod b$
设 $S_i$ 表示 $i$ 的因数集合,注意到 $S_x \cap S_b = S_a \cap S_b$,所以可以得到如下推论:
$$\gcd(a, b) = \gcd(b, a \bmod b)$$
因此通过
其实就是辗转相除法。
```cpp
int gcd(int a, int b){ return !b ? a : gcd(b, a % b);}
```
即可求出 gcd
### 前置知识:裴蜀定理
$a, b$ 为非零整数,则存在整数 $x, y$,使得 $ax + by = \gcd(a, b)$
### 扩展欧几里得
对于任意正整数 $a, b$,考虑一元二次方程 $ax + by = c$ 的整数解
对于任意正整数 $a, b$,考虑一元二次方程 $ax + by = c$ 的整数解.
对于任意整数 $x$,存在 $y = \frac{c - ax}{b}$ 为唯一解,所以只需要考虑这个式子是否为整数,即是否存在 $x$ 使得
@@ -417,7 +412,7 @@ $$
##### CF1010C题解
根据[裴蜀定理](#前置知识裴蜀定理)
根据[裴蜀定理](#裴蜀定理)
$$
\sum_{i = 1}^{n}c_i a_i = c
@@ -425,7 +420,7 @@ $$
有解当且仅当 $c$ 是 $\gcd(a_1, \dots , a_n)$ 的倍数,也就是说原式的线性组合一定是 $\gcd(a_1, \dots , a_n)$ 的倍数。
这是二维[裴蜀定理](#前置知识裴蜀定理) $ax + by = c$ 有解,当且仅当 $c$ 是 $\gcd(a, b)$ 的倍数)的扩展
这是二维[裴蜀定理](#裴蜀定理) $ax + by = c$ 有解,当且仅当 $c$ 是 $\gcd(a, b)$ 的倍数)的扩展
考虑将方程变形:
@@ -587,7 +582,7 @@ $$
m_1p - m_2q = a_2 - a_1
$$
根据[裴蜀定理](#前置知识裴蜀定理),当 $a_2 - a_1$ 不能被 $\gcd(a, b)$ 整除,无解。
根据[裴蜀定理](#裴蜀定理),当 $a_2 - a_1$ 不能被 $\gcd(a, b)$ 整除,无解。
否则可以用[扩展欧几里得算法](#扩展欧几里得)解出一组可行解。
@@ -597,11 +592,13 @@ $$
---
## 组合数学与矩阵初步
## 离散与组合数学
### 组合数学部分
### 多重集合
#### 组合数的定义
多重集合是集合概念的推广,不满足集合的互异性,因此**多重集合不是集合**。多重集合有两种表示方法: $\{a_1, \dots, a_1, a_2, \dots, a_2, \dots\}, \{n_1 \times a_1, n_2 \times a_2, \dots\}$。当 $n_i = \infty$ 时表示有无穷个 $a_i$。
### 组合数
从 $n$ 个物品选 $m$ 个的方案数
@@ -623,7 +620,7 @@ $$
\sum^k_{i = 0}{n \choose i}{m \choose {k - i}} = {{n + m} \choose k}
$$
#### 二项式定理
### 二项式定理
$$
(x + y)^n = \sum^n_{k = 0}{n \choose k}x^{k}y^{n - k}
@@ -631,7 +628,7 @@ $$
其实就是展开式的通项公式。
#### 二项式反演
### 二项式反演
若已知函数 $g$
@@ -643,11 +640,27 @@ $$f_n = \sum^{n}_{i = 0}(-1)^{n - i}{n \choose i}g_i$$
证明就算了吧。。。
### 矩阵部分
---
#### 矩阵简介
## 线性代数
矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数以及常数所构成的方阵。
### 向量
向量一般是用于表示一个点或者一个点到另外一个点的偏移量。用于表示一个点时,这个向量就代表原点到这个点的偏移量。一个向量可以表示为 $(a_1, a_2, \dots)$ 或者 $\left(\begin{aligned}a_1 \\ a_2 \\ \dots\end{aligned}\right)$。向量可分为行向量和列向量。
#### 向量的运算
设 $u = (u_1, u_2 \dots), v = (v_1, v_2, \dots)$
- $u \plusmn v = (u_1 \plusmn v_1, u_2 \plusmn v_2, \dots)$
- $su = (s \cdot u_1, s \cdot u_2, \dots)$
- $u \cdot v = u_1 \cdot v_1 + u_2 \cdot v_2 + \dots = ||u||\ ||v|| \cos \theta$
- $u \times v = u_1 \cdot v_2 - u_2 \cdot v_1$
- $||u|| = \sqrt{u \cdot u} = \sqrt{u_1^2 + u_2^2 + \dots}$
### 矩阵
矩阵 (Matrix) 是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数以及常数所构成的方阵。
由 $m \times n$ 个数 $a_{i, j}$ 排成的 $m$ 行 $n$ 列的数表称为 $m$ 行 $n$ 列的矩阵,简称 $m \times n$ 矩阵。记作:
@@ -664,37 +677,19 @@ $$
这 $m \times n$ 个数称作矩阵 $A$ 的元素,简称为**元**,数 $a_{i, j}$ 位于矩阵 $A$ 的 $(i, j)$ 元,以数 $a_{i, j}$ 为 $(i, j)$ 元的矩阵记作 $(a_{i, j})$ 或 $(a_{i, j})_{m \times n}$
#### 矩阵加减法
#### 矩阵的运算
只有同型矩阵才支持加减法。
对应元素相加减即可。
显然满足交换律,结合律。
#### 矩阵数乘
每个元素都乘这个数即可。
显然满足交换律,结合律和分配律。
#### 矩阵转置
矩阵转置即交换每个元素的行与列下标。
矩阵 $A$ 的转置记作 $A^T$
- 加减法:只有同型矩阵才支持加减法。对应元素相加减即可。显然满足交换律,结合律。
- 数乘:每个元素都乘这个数即可。显然满足交换律,结合律和分配律。
- 转置:矩阵转置即交换每个元素的行与列下标。矩阵 $A$ 的转置记作 $A^T$
$$
(A^T)^T = A \\
(aA)^T = a(A^T) \\
(AB)^T = A^TB^T
(AB)^T = A^TB^T \\
$$
a为常数)
#### 矩阵乘法
不同于加减法,矩阵乘法的要求是第一个矩阵的列数等于另一个矩阵的行数。一个 $n \times r$ 的矩阵乘一个 $r \times m$ 的矩阵得到的是一个 $n \times m$ 的矩阵 设
- 乘法:不同于加减法,矩阵乘法的要求是第一个矩阵的列数等于另一个矩阵的行数。一个 $n \times r$ 的矩阵乘一个 $r \times m$ 的矩阵得到的是一个 $n \times m$ 的矩阵 设
$$C = AB$$
@@ -761,7 +756,7 @@ $$
三维同理。
### 组合数学与矩阵初步例题
### 矩阵例题
#### P1962 斐波那契数列