(五)数学相关
内容太多,估计得分成很多个 blog 写了。这是算法竞赛中的数学,和高中/大学数学相关性较小。
- 数论
- 多项式
- 组合计数
- 线性代数
- 群论
- 博弈论
- 概率期望
- 计算几何
- 杂项
数论
算竞中的数论,无非是解丢番图方程或者数论函数那一套。一些基础的概念这里也就不再赘述了,读者可以自行学习。
经典组合计数
排列组合
容斥原理
- 二项式反演
[HAOI2018] 染色
想要求出出现次数恰好为 \(S\) 的颜色数恰好为 \(k\) 的方案数,记作 \(f(k)\)。钦定 \(k\) 种颜色,恰好为 \(S\),这样的方案数记作 \(g(k)\)。那么有 \(g(k)=\sum_{i=k}^{m}\binom{i}{k}f(i)\)。于是有 \(f(k)=\sum_{i=k}^{m}(-1)^{i-k}\binom{i}{k}g_i\)。而 \(g\) 是好算的 \(\binom{m}{k}\frac{(n)!}{(s!)^k(n-ks)!}(m-k)^{n-ks}\)。
剩下的部分反演一下就好了。
多项式生成函数
拉格朗日插值
已知曲线上 \(n+1\) 个点值 \((x_0,y_0),\dots (x_n,y_n)\)。可以唯一还原出一个多项式。
当点值的横坐标取到 \(0\sim n\) 时,可以 \(O(n)\) 计算。一般的还原多项式均要 \(O(n^2)\) 的时间。
一个很经典的应用是自然数幂和,可以看下一章。
而拉插一般的应用都是在优化卷积。注意到多项式乘法是 \(O(n^2)\) 的,而点值的乘法是 \(O(n)\) 的,在次数固定的情况下,我们就很可以直接在点值下搞事情,最后再插值回来。
直接带入
观察一些特殊值,发现:
观察拉格朗日插值的式子,发现
这题横坐标是 \(0\sim d\) 所以可以直接 \(O(d)\) 预处理阶乘和阶乘逆元。
自然数幂和
斯特林数求法
然后我们发现只需要求第二类斯特林数行。
预处理复杂度 \(O(k\log{k})\)。查询复杂度 \(O(k)\)。和拉格朗日插值一样。
可以从中看出这是一个 \(k+1\) 次多项式。
- 关于如何求 \({k\brace i}\)
设 \(G(i)=i^n,G_i=\sum_{j=0}^{i}{i\choose j}F_j,F_i={n\brace i}i!\)
然后二项式反演,得到 \({n\brace i}=\sum_{j=0}^{i}\frac{(-1)^{i-j}j^n}{(i-j)!j!}\)。直接卷积即可。
伯努利数求法
伯努利数的定义
然后自然能推出递推式:
然后又一个定理
然后我们发现这很不好用,因为我们一般都是要求 \(\sum\limits_{i=1}^{n}i^k\),所以我们把 \(n+1\) 带进去,发现新的系数就是在算 \(B_i\) 时把 \(B_i++\) 所得的系数。
拉格朗日插值求法
如果我们只需要求 \(f(n)\),那么我们可以在 \(O(n)\) 的时间内利用拉格朗日插值求。
但是如果我们要插出多项式,那就只能多项式快速插值了(而且还是大常数 \(O(nlog^2n)\))。所以不推荐用这个方法。
从生成函数角度推导
从新定义自然数幂和 \(S_k(n)=\sum\limits_{i=1}^{n}i^k\)。
我们设 \(\hat{G}(n,z)\) 为序列 \(S_0(n),S_1(n),\dots\) 的 EGF,即 \(\hat{G}(n,z)=\sum\limits_{i\ge 0}\frac{S_i(n)}{i!}z^i=\sum\limits_{i\ge 0}\frac{\sum\limits_{j=1}^{n}j^i}{i!}z^i=\sum\limits_{i=1}^{n}\sum\limits_{j\ge 0}\frac{i^j}{j!}z^i=\sum\limits_{i=1}^{n}\exp(iz)\)。
然后我们可以进行如下化简:
然后我们可以继续推导,分离常数。
设前者为 \(\hat{B}(z)\),后者显然为 \([n,n^2/2,n^3/3,...]\) 的 EGF,所以可以得到
然后发现是个卷积,于是就可以对所有 \(k\) 在 \(O(n\log n)\) 的时间求 \(S_k(n)\) 了。
也就是说我们构造了一个数列 \(B\),其 EGF 为 \(\frac{xe^x}{e^x-1}\)。我们把这种数称作“伯努利数”。
我们可以直接用多项式求逆求出伯努利数。注意无法直接求逆,因为 \(0\) 次项系数是 \(0\),所以要稍加变形,可得 \(\hat{B}(z)=\frac{\sum\limits_{n\ge 0}\frac{1}{n!}z^n}{\sum\limits_{n\ge 0}\frac{1}{(n+1)!}z^n}\),然后再求逆即可。
例
给定 \(n=\prod p_i^{c_i}\) 和 \(K\),求 \(\sum\limits_{i=1}^{n}[\gcd(n,i)=1]\sum_{j=1}^{n}j^K\)。\(1\le K\le 10^6\)。
对式子稍加变形
然后套到原式中有
差分和前缀和
差分相当于卷上了一个 \((1-x)\),而前缀和相当于卷上一个 \(\sum_{i\ge 0}x^i=\frac{1}{1-x}\)。而多项式的乘法又可以等价于点值的乘法,所以差分等价于 \((0,1),(1,0),(2,-1),\dots (d,1-d)\)。\(k\) 阶差分等价于卷上 \((1-x)^k=\sum_{i=0}^{k}(-1)^{i}\binom{k}{i}x^i\)
线性递推
生成函数
大概率不考,记几个比较基本的。
\(\exp(F(x))\) 是连通变不连通,那么不连通 \(\ln\) 一下就是连通的。
五边形数定理
广义的五边形数:\(p(n)=\frac{3n^2-n}{2},n\in \mathbb Z\)。
分拆数:\(P(x)=\prod_{i\ge 1}\frac{1}{1-x^i}\),即为把 \(n\) 拆成若干无序数的和的方案数。
定理:\(\frac{1}{P(x)}=\sum_{k=-\infty}^{\infty}(-1)^{k}x^{\frac{3k(k-1)}{2}}\)。
这个定理比较怪,其实只用记一个东西 \(Q(x)=\sum_{k=-\infty}^{\infty}(-1)^{k}x^{\frac{3k(k-1)}{2}}\) 它和 \(P(x)\) 互为倒数。
线性代数
见 线性代数基础。
概率期望
抽象代数
代数结构
对代数结构的研究的意义是当你解决了一个结构的问题后,可以推广到满足这个结构的任何问题。
定义 半群
对于一个集合 \(S\) 和一个二元运算 \(*\),如果其满足:
- 封闭性:\(\forall a,b\in S, a*b\in S\)。
- 结合律:\(a*(b*c)=(a*b)*c\)。
定义 群
满足半群性质。
存在单位元 \(e\),使得 \(\forall a\in S,a*e=e*a=a\)。
存在逆元,使得 \(\forall a\in S, \exist b\in S,a*b=e\)。
一个简单的类比,合数乘法是半群,质数乘法是群。
定义 交换群
又称 Abel 群。
在群的定义的基础下满足交换律。
群论
博弈
格路计数问题
JLOI 骗我呢
模拟赛 不平衡度
给定一棵二叉树,对于其所有拓扑序,计算任意前缀,每个点左右子树中已经存在的点的个数之差的绝对值的最大值的最大值,求这个最大值的和。
递推关系
参考
oiwiki 数学部分
kersen 概率期望:https://www.cnblogs.com/zzz-hhh/p/14016126.html

浙公网安备 33010602011771号