组合数学总结 组合数学总结

(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{egin{array}{}1*3*5*...*n& extrm{n%2=1}\2*4*5*...*n & extrm{n%2=0}end{array} ight.)

    [lim_{k oinfty}[frac{2^{2k}(k)!^2}{(2k)!}]^2frac{1}{2k+1}=frac{pi}{2} ]

    [lim_{k oinfty}[frac{(2k)!!}{(2k-1)!!}]^2frac{1}{2k+1}=frac{pi}{2} ]

    [lim_{k oinfty}[frac{(2k)!!(2k)!!}{(2k)!}]^2frac{1}{2k+1}=frac{pi}{2} ]

  • (Stirling)公式:(n!sim sqrt{2pi n}(frac{n}{e})^n)

(Day2)

  • (Cayley)定理:有(n)个顶点的树的个数为(n^{n-2})

    对于一棵树,它一定和一个序列一一对应,下附证明:

    每次删去树的叶子中编号最小的节点及其连边,按删去顺序记下其相邻节点,最终生成序列(b_1,b_2,...,b_{n-2})(又称(prufer)序列),即树可以生成唯一的序列,下面只用证明序列可以生成唯一的树即可,我们观察这样的两个序列

    (left{egin{array}{}1,2,3,...,n\b_1,b_2,b_3...,b_nend{array} ight.)

    我们找到第一个序列中的最小无重元(k)(最小的不在(b)中出现的数),它一定为树上最先删去的节点,((k,b_{first}))一定为最先删去的边,从第一个序列中去掉(k)(b)中去掉第一个数,重复执行这一过程,就可以还原唯一的一棵树。(有空补上一张图来说明咕了

    • 性质(1):度数为(d_i)的点在序列中会出现(d_i-1)
    • 性质(2):对于给定度数为(d_{1sim n})的一棵无根树共有(frac{(n-2)!}{prod_{i=1}^n(d_i-1)!})种情况。((d_i-1)(i(iin [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<jleq 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_1leq b_2leq...leq b_k)。设(c_i=b_i-i+1),则一定有(c_1leq c_2leq ...leq c_kleq k+r-1),证毕。

        推论:(S={n_1a_1,n_2a_2,...,n_ka_k},rgeq 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},mleq 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},eta=frac{1-sqrt{5}}{2}
    \Rightarrow F_n=frac{alphan-etan}{sqrt{5}}
    $$

  • 母函数的性质:

    • [ b_k = left{ egin{array}{ll}0 & k<l\a_{k-l} & kgeq l\end{array} ight.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_iRightarrow B(x)=frac{A(x)}{1-x} ]

    • [ sum^infty_{k=0}a_k extrm{收敛},b_k=sum^infty_{k=0}a_kRightarrow B(x)=frac{A(1)-xA(x)}{1-x} ]

    • [ b_k=ka_kRightarrow 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{egin{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_nend{array} ight. ]

    • 我们定义(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^jsum^{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_ialpha_i^n ]

  • 共轭根:设(alpha_1,alpha_2)为一对共轭根,(alpha_1= ho(cos heta+isin heta),alpha_2= ho(cos heta-isin heta))所以有:(frac{A_1}{1-alpha_1x}+frac{A_2}{1-alpha_2x},x^n)系数为(A ho^ncosn heta+B ho^nsinn heta)

  • (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_nleq e^{sqrt{frac{20}{3}n}}(p_n< e^{sqrt{frac{2}{3}npi}}))证明略!!!
  • 指数型母函数(用于求排列):定义:(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!}+...pmfrac{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)个格子放在禁区的方案数。