组合数学总结
组合数学总结
Day1:
-
简单格路问题:|(0,0)->(m,n)|={m+n \choose n}\qquad,|(0,1)->(m,n)|(m>n)且不经过y=x方案数:所有经过y=x的方案树一定和(1,0)->(m,n)的方案数一一对应。
-
Wallis公式:
注:以下的n!!=\left\{\begin{array}{}1*3*5*...*n&\textrm{n%2=1}\\2*4*5*...*n & \textrm{n%2=0}\end{array} \right.
\lim_{k\to\infty}[\frac{2^{2k}(k)!^2}{(2k)!}]^2\frac{1}{2k+1}=\frac{\pi}{2}\lim_{k\to\infty}[\frac{(2k)!!}{(2k-1)!!}]^2\frac{1}{2k+1}=\frac{\pi}{2}\lim_{k\to\infty}[\frac{(2k)!!(2k)!!}{(2k)!}]^2\frac{1}{2k+1}=\frac{\pi}{2} -
Stirling公式:n!\sim \sqrt{2\pi n}(\frac{n}{e})^n
Day2:
-
Cayley定理:有n个顶点的树的个数为n^{n-2}
对于一棵树,它一定和一个序列一一对应,下附证明:
每次删去树的叶子中编号最小的节点及其连边,按删去顺序记下其相邻节点,最终生成序列b_1,b_2,...,b_{n-2}(又称prufer序列),即树可以生成唯一的序列,下面只用证明序列可以生成唯一的树即可,我们观察这样的两个序列
\left\{\begin{array}{}1,2,3,...,n\\b_1,b_2,b_3...,b_n\end{array} \right.
我们找到第一个序列中的最小无重元k(最小的不在b中出现的数),它一定为树上最先删去的节点,(k,b_{first})一定为最先删去的边,从第一个序列中去掉k,b中去掉第一个数,重复执行这一过程,就可以还原唯一的一棵树。(有空补上一张图来说明,
咕了)- 性质1:度数为d_i的点在序列中会出现d_i-1次
- 性质2:对于给定度数为d_{1\sim n}的一棵无根树共有\frac{(n-2)!}{\prod_{i=1}^n(d_i-1)!}种情况。(d_i-1个i(i\in [1,n])的可重全排)
-
全排列生成算法(生成一个全排列下一个排列,生成一个全排列的编号)
-
生成下一个排列:对于一个排列P_1,P_2,...,P_n,我们找到j=max\{P_i<P_{i+1}\},k=max\{P_i>P_j\}对换P_j,P_k,将新后缀P_{j+1},...P_{k-1},P_j,P_{k+1},...P_n翻转即可。
-
生成一个全排列的编号:我们生成一个被称为中介数的序列a即可,a_i=\Sigma[P_i>P_j](i<j\leq n)(即a_i为P_i后面小于P_i的数的个数),则编号为:
Id=\sum^{n-1}_{i=1}a_i(n-i)! -
延伸:n!=(n-1)(n-1)!+(n-2)(n-2)!+...+1*1!+1
-
-
多重集:元素可以多次出现的集合,设a_i出现n_i次,记含有k种不同元素的可重集为S=\{n_1a_1,n_2a_2,...n_ka_k\}
-
排列:对于一个可重集S=\{n_1a_1,n_2a_2,...,n_ka_k\},n=\Sigma n_i从中选出r个元素做排列的个数N为:
- r>n时,N=0
- r=n时,N=\frac{n!}{n_1!n_2!...n_k!}
- r<n,\forall n_i>r时,N=k^r
-
r<n,\exist n_i<r时,无通式,看情况。
-
组合:对于一个可重集S=\{n_1a_1,n_2a_2,...,n_ka_k\},n=\Sigma n_i从中选出r个元素做组合的个数N为:
-
r>n时,N=0
-
r=n时,N=1
-
r<n,\forall n_i>r时,N={r+k-1 \choose r}
证明如下:设有k类元素1,2,...k取出可重集b_1,b_2,...,b_k,则有b_1\leq b_2\leq...\leq b_k。设c_i=b_i-i+1,则一定有c_1\leq c_2\leq ...\leq c_k\leq k+r-1,证毕。
推论:S=\{n_1a_1,n_2a_2,...,n_ka_k\},r\geq k,则S中每个元素至少取一个的r可重集组合为:{r-1 \choose k-1}={r-1 \choose r-k}
-
r<n,\exist n_i<r时,无通式,看情况。
-
-
不相邻组合:即要求从1,2,...,n中选出的数不相邻,方案数为:{n-r+1 \choose r}
证明如下:设b_1,b_2,...,b_r为取出的一个组合一定满足b_1<b_2<...<b_r且相邻的两数差\geq2
设c_i=b_i-i+1,这样相当于去掉了相邻这一限制,一定满足c_1<c_2<...<c_r<n-r+1
-
-
组合中的常用的公式(懒得附证明了,证法多样,常见的证法为分多种情况考虑):
- {n \choose r}={n \choose n-r}
- {n \choose r}={n-1 \choose r}+{n-1 \choose r-1}
- {n \choose n}+{n+1 \choose n}+{n+2 \choose n}+...+{n+r \choose n}={n+r+1 \choose n+1}
- {n \choose l}{l \choose r}={n \choose r}{n-r \choose l-r}
- {m \choose 0}+{m \choose 1}+{m \choose 2}+...+{m \choose m}=2^m(本条和下一条均与二项式定理有关)
- {m \choose 0}-{m \choose 1}+{m \choose 2}+...\pm {m \choose m}=0
- {m+n \choose r}={m \choose 0}{n \choose r}+{m \choose 1}{n \choose r-1}+{m \choose 2}{n \choose r-2}+...+{m \choose r}{n \choose 0}
- {m+n \choose m}={m \choose 0}{n \choose 0}+{m \choose 1}{n \choose 1}+{m \choose 2}{n \choose 2}+...+{m \choose m}{n \choose m},m\leq n
Day3:
-
母函数:对于数列C,构造一个函数G(x)=C_0+C_1x_1+C_2x_2+C_3x_3+...,我们称G(x)为序列C母函数。
-
重要桥梁:\frac{1}{1-x}=1+x+x^2+x^3+...。(用等比数列即可证明)
-
已知递推式,利用母函数求通项:(以下用Fibonacci数列(F_n=F_{n-1}+F_{n-2},F_1=F_2=1)举例)
- 列出母函数,代入递推式。G(x)=F_1x+F_2x^2+F_3x^3+... \\\Rightarrow G(x)=F_1x+F_2x^2+(F_1+F_2)x^3+... \\\Rightarrow G(x)=x[G(x)-x]+x^2G(x)+x^2+x \\\Rightarrow G(x)=\frac{x}{1-x-x^2}
- 列出母函数,代入递推式。
-
-
将分母化为(1-k_1x)(1-k_2x)...的形式
G(x)=\frac{x}{(1-\frac{1+\sqrt{5}}{2}x)(1-\frac{1-\sqrt{5}}{2}x)} -
用待定系数法母函数转化为G(x)=\frac{A_1}{1-k_1x}+\frac{A_2}{1-k_2x}+...
G(x)=\frac{\frac{1}{\sqrt{5}}}{1-\frac{1+\sqrt{5}}{2}x}+\frac{-\frac{1}{\sqrt{5}}}{1-\frac{1-\sqrt{5}}{2}x} -
对于每一个\frac{A_i}{1-k_ix},都可以化为A_i(1+k_ix+k_i^2x^2+...),然后比对系数,返回定义即可
$$
\alpha=\frac{1+\sqrt{5}}{2},\beta=\frac{1-\sqrt{5}}{2}
\\Rightarrow F_n=\frac{\alphan-\betan}{\sqrt{5}}
$$ -
母函数的性质:
-
b_k = \left\{ \begin{array}{ll}0 & k<l\\a_{k-l} & k\geq l\\\end{array} \right.\Rightarrow B(x)=x^lA(x)
-
b_k=a_{k-l}\Rightarrow B(x)=[A(x)-\sum^{l-1}_{k=0}a_kx_k]/x^l
-
b_k=\sum^k_{k=0}a_i\Rightarrow B(x)=\frac{A(x)}{1-x}
-
\sum^\infty_{k=0}a_k\textrm{收敛},b_k=\sum^\infty_{k=0}a_k\Rightarrow B(x)=\frac{A(1)-xA(x)}{1-x}
-
b_k=ka_k\Rightarrow B(x)=xA'(x)(A'(x)=\frac{d}{dx}A(x))
-
c_k=a_0b_k+a_1b_{k-1}+...+a_kb_0=\sum^k_{h=0}a_hb_{k-h}\Rightarrow C(x)=A(x)B(x)
-
b_k=\frac{a_k}{1+k}\Rightarrow B(x)=\frac{1}{x}\int^x_0A(x)dx
-
-
定义从n各不同元素中取出r个进行允许重复的组合为\mathbb{C}(n,r):
- 递推式:\mathbb{C}(n,r)=\mathbb{C}(n-1,r)+\mathbb{C}(n,r-1)
- 设\{\mathbb{C}(n,r)\}母函数为G_n(x),推出G_n(x)=(1-x)^{-n}
- 对上式运用麦克劳林公式,得G_n(x)=1+nx+\frac{n(n+1)}{2!}x+...+\frac{n(n+1)...(n+r)}{(r+1)!}x^{r+1}
-
Fibonacci数列重要性质:
- F_1+F_2+...+F_n=F_{n+2}-1
- F_1+F_3+F_5+...+F_{2n-1}=F_{2n}
- F_1^2+F_2^2+...+F_n^2=F_nF_{n+1}
-
行列式(因为懒得打,就不写出来了),对于一个方程组:
\left\{\begin{array}{ll}a_{11}x_1+a_{12}x_2+...+a_{1n}x_n=b_n\\a_{21}x_1+a_{22}x_2+...+a_{2n}x_n=b_n\\...\\a_{n1}x_1+a_{n2}x_2+...+a_{nn}x_n=b_n\end{array} \right.-
我们定义D为由系数a_{ij}组成的行列式,D_j表示将第j列替换为b后的行列式,则有x_j=\frac{D_j}{D}
-
定义D_{i,j}为D去掉i行j列后的行列式。
-
D=a_{i1}(-1)^{i+1}D_{i1}+a_{i2}(-1)^{i+2}D_{i2}+...a_{in}(-1)^{i+n}D_{in}
-
实际上D就等于从距震中取n个数相乘,保证每行每列仅取一个数的所有方案答案和,每种方案的系数遵循正负对角线。
-
Day4:
-
线性常系数齐次递推关系:
-
定义:a_n+c_1a_{n-1}+c_2a_{n-2}+...+c_ka_{n-k}=0,a_0=d_0,a_1=d_1,...,a_{k-1}=d_{k-1}
-
C(x)=x^k+c_1x^{k-1}+...+c_k为\{a_n\}的特征多项式
-
- 我们将以下式子相加:x^k(a_k+c_1a_{k-1}+c_2a_{k-2}+...+c_ka_0)=0\\ x^{k+1}(a_{k+1}+c_1a_k+c_2a_{k-1}+...+c_ka_1)=0\\ ...\\ x^n(a_n+c_1a_{n-1}+c_2a_{n-2}+...+c_ka_{n-k})=0\\ \Rightarrow \sum^k_{i=1}c_ix^iG(x)=\sum^{k-1}_{j=0}c_jx^j\sum^{k-1-j}_{i=0}a_ix_i=P(x)
- 我们将以下式子相加:
-
设C(x)=0在复数域上i个根为\alpha_1,\alpha_2,...,\alpha_i,有C(x)=(x-\alpha_1)^{k_1}(x-\alpha_2)^{k_2}...(x-\alpha_i)^{k_i}
-
\sum^k_{i=1}c_ix^i=x^kC(\frac{1}{x})\\ \Rightarrow G(x)=\frac{P(x)}{\overset{i}{\underset{j=1}{\prod}}(1-\alpha_jx)^{k_j}}\\ \Rightarrow G(x)=\sum^i_{t=1}\sum^{k_t}_{j=1}\frac{A_{tj}}{(1-\alpha_tx)^j}\\ \Rightarrow a_n=\sum^i_{t=1}\sum^{k_t}_{j=1}A_{tj}{n+j-1 \choose j}\alpha_t
- 无重根:A_i用范德蒙德行列式求即可a_n=\sum^{k}_{i=1}A_i\alpha_i^n
- 无重根:A_i用范德蒙德行列式求即可
-
-
共轭根:设\alpha_1,\alpha_2为一对共轭根,\alpha_1=\rho(cos\theta+isin\theta),\alpha_2=\rho(cos\theta-isin\theta)所以有:\frac{A_1}{1-\alpha_1x}+\frac{A_2}{1-\alpha_2x},x^n系数为A\rho^ncosn\theta+B\rho^nsinn\theta
-
k重根:a_n=(A_1+A_2n+A_3n^2+...+A_kn^{k-1})k^n
-
整数的拆分:
-
用a_1,a_2,a_3,...,a_n的砝码,各有b_1,b_2,b_3,...,b_n个,问能称出的重量及称法个数,母函数(组合):
G(x)=\prod^n_{i=1}(1+x^{a_i}+x^{a_i*2}+...+x^{a_i*b_i}) -
母函数拆开后,每一项的次数表示重量,系数表示该重量的方案数。
-
设将n拆为1,2,3,...之和,允许重复的方案数为p_n,\{p_n\}其母函数为:
G(x)=\prod^\infty_{i=1}(1-x^i)^{-1}
-
-
设将n拆为1,2,3,...m之和,允许重复,且m至少出现一次的方案数为p'_n,\{p'_n\}其母函数为:
G(x)=\prod^m_{i=1}(1-x^i)^{-1}-\prod^{m-1}{i=1}(1-x^i)^{-1}- 拆分数估计:p_n\leq e^{\sqrt{\frac{20}{3}n}}(p_n< e^{\sqrt{\frac{2}{3}n\pi}})证明略!!!
-
指数型母函数(用于求排列):定义:G(x)=a_0+\frac{a_1}{1!}x+\frac{a_2}{2!}x^2+\frac{a_3}{3!}x^3...
-
用a_1,a_2,a_3,...,a_n的元素,各有b_1,b_2,b_3,...,b_n个,问其取r个做排列的个数,母函数为:
G(x)=\prod^n_{i=1}(1+\frac{x^{1}}{1!}+\frac{x^{2}}{2!}+...+\frac{x^{b_i}}{b_i!}) -
母函数拆开后,x^r的系数化为\frac{t}{r!}形式后,t为取r个做排列的个数。
-
常用式子:e^x的麦克劳林展开。
-
-
错排:n个元素做排列,要求每个元素不在其位置上。(可用容斥和棋盘多项式理解)
- 设D_n表示n个数的错排,有递推式:D_n=(n-1)(D_{n-1}+D_{n-2}),即为任选一个数i,和其他n-1个数一一互换,其余n-2个数错排的方案数与除i的n-1个数错排,再将i和其他的数互换的方案数之和。
- 将原式化为:D_n-nD_{n-1}=(-1)^n,令G(x)=D_0+D_1x+\frac{D_2}{2!}x^2+\frac{D_3}{3!}x^3...
- 带入化简得:G(x)=\frac{e^{-x}}{1-x},所以有D_n=(1-1+\frac{1}{2!}-\frac{1}{3!}+...\pm\frac{1}{n!})n!
-
Ferrer图像
- 定义:从上到下每行点数为n_1,n_2,n_3,...,n_m,满足:n_1>n_2>n_3>...>n_m
- 共轭图像:将原图像的第1行和第1列,第2行和第2列。。。第k行和第k列互换。
- 性质1:正整数n拆分为k个数和的拆分数和将n拆分为最大数为k的拆分数相等。
- 性质2:正整数n拆分为不超过k个数和的拆分数和将n拆分为最大数不超过为k的拆分数相等。
-
棋盘多项式(棋盘放棋子,满足每行每列仅有一个棋子):
-
设C表示一种棋盘,r_k(c)表示在棋盘C上放k个棋子的个数,则棋盘多项式为:
R(C)=\sum^n_{k=0}r_k(C)x^k -
棋盘多项式的系数为方案数(看定义)
-
性质:R(c)=xR(C_{(i)})+R(C_{(e)}),C_{(i)}表示将C上的指定格子的行列删去,C_{(e)}表示将指定格子删去
-
若C_1,C_2相互隔离(C_1中每个格子都与C_2的格子同行同列),有:R(C)=R(C_1)R(C_2)
-
有禁区的排列:n!-r_1(n-1)!+r_2(n-2)!-...\pm r_n,其中r_i是有r_i个格子放在禁区的方案数。
-
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步