• sss


    斐波那契数列

    其实不是特殊计数数列,但是可能出现在题目里.

    定义:(f_0=0,f_1=1,f_n=f_{n-1}+f_{n-2}(ngeq 2)),生成函数:(F(x)=frac{x}{1-x-x^2}).

    通项公式:

    [f_n=frac{1}{sqrt 5}left(frac{sqrt 5 +1}{2} ight)^n-frac{1}{sqrt 5}left(frac{sqrt 5-1}{2} ight)^n ]

    一些性质:

    (1.) (f_n^2-f_{n-1}f_{n+1}=(-1)^{n-1}).

    (2.) (sum_{i=1}^{n}f_{2i-1}=f_{2n}).

    (3.) (sum_{i=1}^{n}f_{2i}=f_{2n+1}-1).

    (4.) (sum_{i=1}^n f_i^2=f_{n}f_{n+1}).

    (5.) (frac{f_{2n}}{f_n}=f_{n-1}+f_{n+1}).

    (6.) (sum_{i=1}^n f_i=f_{i+2}-1).

    (7.) (m|nRightarrow f_m|f_n).

    (8.) (f_{gcd(n,m)}=gcd(f_n,f_m))

    求第(n)项通常可以用矩阵乘法:

    [egin{bmatrix} f_{n-1}& f_{n} end{bmatrix} imes egin{bmatrix} 0 & 1 \ 1 & 1 end{bmatrix} =egin{bmatrix} f_{n}& f_{n+1} end{bmatrix} ]

    错位排列

    (d_n)表示(n)个数字错位排列的方案数,则:

    [n!=sum_{i=0}^ninom{n}{i}d_i ]

    二项式反演,得到通项公式:

    [d_n=sum_{i=0}^n(-1)^iinom{n}{i}(n-i)!=n!sum_{i=0}^nfrac{(-1)^i}{i!} ]

    两个递推公式:

    [d_n=(n-1)(d_{n-1}+d_{n-2}) ]

    证明:

    考虑分类讨论,第(n)个数字放进去,如果前面所有数字都是错排,那么只需把(n)和前面任意一个数字交换即可. 如果前面存在一个数字不是错排,那么必须和他交换.

    化简一下上面的式子,可以得到:

    [d_n=n imes d_{n-1}+(-1)^n ]

    卡特兰数列

    [c_i=egin{cases}1,&i=0\ sum_{j=0}^{i-1}c_jc_{i-j-1},&igeq1end{cases} ]

    生成函数

    [C(x)=frac{1pmsqrt{1-4x}}{2x} ]

    通项公式

    [c_n=frac{inom{2n}{n}}{n+1}=inom{2n}{n}-inom{2n}{n-1} ]

    递推式

    [c_n=frac{4n-2}{n+1}c_{n-1} ]

    常见模型:

    (1.) 一个足够大的栈的进栈序列为(1,2,cdots,n)时有(c_n)个不同的出栈序列.

    (2.) (n+1)个叶子的满二叉树的数量为(c_n)(每个节点有(0/2)个儿子).

    (3.)(n imes n)的方格地图中,从一个角到另一个角,不跨越对角线的路径数为(c_n).

    (4.) 圆周上有(2n)个点,以这些点为端点连(n)条互不相交的弦,不同的连法总数为(c_n).

    (5.)(n-2)边形用其(n-1)条对角线分割为互不重叠的三角形的分法总数为(c_n).

    (6.) (n)对括号合法的括号序列的方案数为(c_n).

    格路径计数的结论:

    ((0,0))((n,m))不越过直线(y=x)的格路径条数为(c_n).

    ((0,0))((n,m)(ngeq m))越过直线(y=x)的格路径条数为(inom{n+m}{m}-inom{n+m}{m-1}).

    斯特林数列

    第一类斯特林数:(egin{bmatrix}n\mend{bmatrix})表示把(n)个有标号的球分成(m)个无标号的非空轮换的方案数.

    递推式:

    [egin{bmatrix}n\mend{bmatrix}=egin{bmatrix}n-1\m-1end{bmatrix}+(n-1)egin{bmatrix}n-1\mend{bmatrix} ]

    特殊的值:

    [egin{bmatrix}n\0end{bmatrix}=egin{cases}1, & n= 0\ 0, & n >0end{cases} , egin{bmatrix}n\1end{bmatrix}=(n-1)! ]

    第二类斯特林数:(egin{Bmatrix}n\mend{Bmatrix})表示把(n)个有标号的球分成(m)个无标号的非空集合的方案数.

    递推式:

    [egin{Bmatrix}n\mend{Bmatrix}=egin{Bmatrix}n-1\m-1end{Bmatrix}+megin{Bmatrix}n-1\mend{Bmatrix} ]

    特殊的值:

    [egin{Bmatrix}n\0end{Bmatrix}=egin{cases}1, & n= 0\ 0, & n >0end{cases} , egin{Bmatrix}n\2end{Bmatrix}=2^{n-1}-1 ]

    第二类斯特林数可以用容斥写出一个通项公式:

    [egin{Bmatrix}n\mend{Bmatrix}=frac{1}{m!}sum_{i=0}^m(-1)^iinom{m}{i}(m-i)^n ]

    更重要的是,我们要认识到计数是双向的:

    [m^n=sum_{i=0}^minom{m}{i}egin{Bmatrix}n\iend{Bmatrix}i! ]

    (n)个球随便放到(m)个盒子里(可以空)的方案数,就相当于枚举有多少个盒子非空,用第二类斯特林数计数,再乘上盒子标号的方案数之和.

    [n!=sum_{i=0}^negin{bmatrix} n\ i end{bmatrix} ]

    (n)个元素排列的方案数,其实也等于枚举置换环个数的方案数之和,也就是第一类斯特林数.

    斯特林数和阶乘幂都有很强的联系:

    [m^n=sum_{i=0}^minom{m}{i}egin{Bmatrix}n\iend{Bmatrix}i!=sum_{i=0}^megin{Bmatrix}n\iend{Bmatrix}m^{underline{i}} ]

    我们一般会把求和上界换成(n)(当(n>m)的时候显然没什么问题,因为这时候二项式系数是(0),当(n<m)的时候只要枚举到(n)即可,因为斯特林数是(0)):

    [m^n=sum_{i=0}^negin{Bmatrix}n\iend{Bmatrix}m^{underline{i}} ]

    应用阶乘幂翻转(m^{overline{n}}=(-1)^n(-m)^{underline{n}}),可以令上式中的(m=-m),则:

    [(-m)^n=sum_{i=0}^negin{Bmatrix}n\iend{Bmatrix}(-m)^{underline{i}} \ m^n(-1)^n=sum_{i=0}^n(-1)^iegin{Bmatrix}n\iend{Bmatrix}m^{overline{i}} \ m^n=sum_{i=0}^n(-1)^{n-i}egin{Bmatrix}n\iend{Bmatrix}m^{overline{i}} ]

    第一类斯特林数和上升幂也有很强的关系:

    [m^{overline n}=sum_{i=0}^negin{bmatrix}n\ iend{bmatrix}m^i ]

    同样也可以阶乘幂翻转一下,得到:

    [(-m)^{overline n}=sum_{i=0}^n(-1)^i egin{bmatrix}n\ iend{bmatrix}m^i \ (-1)^nm^{underline n}=sum_{i=0}^n(-1)^i egin{bmatrix}n\ iend{bmatrix}m^i \ m^{underline n}=sum_{i=0}^n(-1)^{n-i} egin{bmatrix}n\ iend{bmatrix}m^i ]

    首先要记住两个基本公式:下降幂通过第二类斯特林数求和得到普通幂,普通幂通过第一类斯特林数求和得到上升幂. 然后剩下的再通过阶乘幂翻转推导即可.

    根据斯特林数和阶乘幂之间的关系,我们还可以推导出一个翻转公式:

    [m^n=sum_{i=0}^negin{Bmatrix}n\iend{Bmatrix}m^{underline{i}}=sum_{i=0}^negin{Bmatrix}n\iend{Bmatrix}sum_{j=0}^i(-1)^{i-j}egin{bmatrix}i\ jend{bmatrix} m^j \ m^n=sum_{i=0}^nsum_{j=0}^i egin{Bmatrix}n\ iend{Bmatrix}egin{bmatrix}i\jend{bmatrix}(-1)^{i-j}m^j \ =sum_{i=0}^nsum_{j=i}^n egin{Bmatrix}n\ jend{Bmatrix}egin{bmatrix}j\ iend{bmatrix}(-1)^{j-i}m^i ]

    对应项系数相等,就有如下的公式成立:

    [sum_{j=i}^n egin{Bmatrix}n\ jend{Bmatrix}egin{bmatrix}j\ iend{bmatrix}(-1)^{j-i}=[i=n] ]

    同理可以这样操作一下:

    [m^{overline n}=sum_{i=0}^negin{bmatrix}n\ iend{bmatrix}m^i=sum_{i=0}^negin{bmatrix}n\ iend{bmatrix}sum_{j=0}^i(-1)^{i-j}egin{Bmatrix}i\ jend{Bmatrix}m^{overline{j}} \m^{overline n}=sum_{i=0}^nsum_{j=0}^iegin{bmatrix}n\iend{bmatrix}egin{Bmatrix}i\ jend{Bmatrix} (-1)^{i-j}m^{overline j} \ =sum_{i=0}^nsum_{j=i}^n egin{bmatrix}n\jend{bmatrix}egin{Bmatrix}j\iend{Bmatrix}(-1)^{j-i}m^{overline j} ]

    对应项系数相等,就有如下的公式成立:

    [sum_{j=i}^n egin{bmatrix}n\ jend{bmatrix}egin{Bmatrix}j\ iend{Bmatrix}(-1)^{j-i}=[i=n] ]

    这两个公式就叫翻转公式,那么接下来就有两个显而易见的反演成立:

    [f(n)=sum_{i=0}^negin{Bmatrix}n\ iend{Bmatrix}g(i)Longleftrightarrow g(n)=sum_{i=0}^n(-1)^{n-i}egin{bmatrix}n\ iend{bmatrix} f(i) \ f(n)=sum_{i=0}^negin{bmatrix}n\ iend{bmatrix}g(i)Longleftrightarrow g(n)=sum_{i=0}^n(-1)^{n-i}egin{Bmatrix}n\ iend{Bmatrix} f(i) ]

    Bell数列

    定义:(w_n)表示把(1sim n)的自然数放到若干个无序集合中的方案数.

    递推式:

    [w_n=[n=1]+sum_{i=1}^ninom{n-1}{i-1}w_{n-i} =sum_{i=0}^n egin{Bmatrix}n\ iend{Bmatrix} ]

    生成函数:

    [hat W(x)=exp (e^{x}-1) ]

    Prufer序列

    (mathrm{Prufer})序列将一棵(n)个点的无根树和一个长度为(n-2)的正整数序列建立起一一对应关系.

    根据树构造序列:每次选取标号最小的叶子,删去并将其父亲的编号加入序列.

    根据序列构造树:取序列首元素(x),最下标号不在序列中的点(y),连接((x,y)),删去(x,y). 当序列外的点集只剩两个数字时连接它们.

    推论:

    (1.) 度数为(d_i)的节点在序列中出现(d_i-1)次.

    (2.) (mathrm{K}_n)的生成树个数为(n^{n-2})个.

    (3.) 给定度数序列(d_{1sim n}),无根树的方案数为(inom{n-2}{d_1-1,d_2-1,cdots,d_n-1}).

    (4.) 图联通方案数

    我们可以使用(mathrm{Prufer})序列来求解. 不妨把(k)个连通块缩成一个点,那么问题就转化为构造一棵树. 不妨设这棵树上每个点的度数为(d_i),那么(mathrm{Prufer})序列的方案数显然就是一个多项式系数:

    [inom{k-2}{d_1-1,d_2-1,cdots,d_k-1}=frac{(k-2)!}{prod_{i=1}^k(d_i-1)!} ]

    显然连接连通块(i)的边有(s_i)中选择,那么联通整棵树的方案数就是:

    [inom{k-2}{d_1-1,d_2-1,cdots,d_k-1}prod_{i=1}^ks_i^{d_i} ]

    现在我们枚举度数序列(d)的所有情况,那么图联通方案数就是:

    [sum_{sum_{i=1}^kd_i=2k-1,forall d_igeq 1}inom{k-2}{d_1-1,d_2-1,cdots,d_k-1}prod_{i=1}^ks_i^{d_i} ]

    然后换元,设(d_i-1=t_i),那么上式等于:

    [sum_{sum_{i=1}^kt_i=k-2,forall t_igeq 0}inom{k-2}{t_1,t_2,cdots,t_k}prod_{i=1}^ks_i^{t_i+1} ]

    这时候考虑多项式定理:

    [sum_{sum_{i=1}^ka_i=p}inom{p}{a_1,a_2,cdots,a_k}prod_{i=1}^kx_i^{a_i}=left(sum_{i=1}^kx_i ight)^p ]

    于是答案就显而易见了:

    [sum_{sum_{i=1}^kt_i=k-2,forall t_igeq 0}inom{k-2}{t_1,t_2,cdots,t_k}prod_{i=1}^ks_i^{t_i+1}=left(sum_{i=1}^{k}s_i ight)^{k-2}prod_{i=1}^k s_i=n^{k-2}prod s_i ]

  • 相关阅读:
    spring的bean的属性注入
    spring中bean的常用属性
    spring Code(spring 核心)
    mybatis的缓存
    mybatis 调用存储过程
    mybatis的动态sql
    mybatis的关系映射
    mybatis添加信息自动生成主键
    mybatis传递参数的方法
    如何编写跨平台的Java代码
  • 原文地址:https://www.cnblogs.com/Parsnip/p/13398578.html
Copyright © 2020-2023  润新知