zoukankan      html  css  js  c++  java
  • 组合数学—递推关系与母函数


    注:原创不易,转载请务必注明原作者和出处,感谢支持!

    一 写在开头

    1.1 本文内容

    本文内容为《组合数学》课程的第二部分,递推关系与母函数。这部分的内容分解图如下。

    二 递推关系的定义与求解

    2.1 递推关系的定义

    递推关系的隐式定义为对于数列({a_i vert i ge 0})和任意自然数(n),一个关系到(a_n)和某些(a_i(i < n))的方程,称为递推关系,记作:

    [F(a_0, a_1, a_2, ..., a_n) = 0 ]

    初始条件

    [a_0 = d_0, a_1 = d_1, ..., a_k = d_k ]

    其中初始条件的个数被称为递推关系的阶。

    递推关系的显式定义为对于数列({a_i vert i ge 0}),把(a_n)和其前若干项联系起来的等式对所有(n ge k)均成立,称该等式为({a_i})的递推关系。记作

    [a_n = F(a_{n-1}, a_{n-2}, ..., a_{n-k}) ]

    2.2 递推关系的建立

    递推关系的建立步骤:

    • 第一步:找出第(n)项与其前面最近几项的关系
    • 第二步:获得最前面几项的具体值,即初值

    递推关系的建立实例

    实例1:有一个小孩要爬上有(n)个台阶的楼梯,他一步可以爬一个台阶或者两个台阶。这个小孩爬上这(n)个台阶楼梯的不同方法的数目记作(a_n),则(a_n)的递推关系为:

    [a_n = a_{n-1} + a_{n-2} ]

    [a_1 = 1, a_2 = 2 ]

    实例2:在信道上传输由(a, b, c)三个字母组成的长为(n)的字符串,若字符串中有两个(a)连续出现,则信道就不能传输,令(a_n)表示信道可以传输的长为(n)的字符串的个数,求(a_n)满足条件的递推关系,则

    [a_n = 2a_{n-1} + 2a_{n-2} ]

    [a_1 = 3, a_2 = 8 ]

    实例3:把(n)个相同的球放入(k)个不同的盒子中,每个盒子中的球不少于2个又不多于4个。其不同的放法的数目记作(a_{n,k}),求(a_{n,k})的递推关系。则

    [a_{n, k} = a_{n-2, k-1} + a_{n-3, k-1} + a_{n-4, k-1} ]

    [a_{2,1} = a_{3, 1} = a_{4, 1} = 1 ]

    对于(n = 0)(n = 1)(n > 4),有(a_{n,1} = 0)

    2.3 递推关系的求解

    对于(r)阶递推关系的一般形式

    [a_n + c_1(n)a_{n-1} + c_2(n)a_{n-2} + ... + c_r(n)a_{n-r} = e(n) ]

    其中,(n ge r, c_r e 0)

    (e(n) = 0),则称其为齐次递推关系式
    (e(n) e 0),则称其为非齐次递推关系式
    (c_i(n) = c_i, (i = 1, 2, ..., r)),则称其为常系数递推关系式

    对于常系数齐次递推关系式

    [a_n + c_1a_{n-1} + c_2a_{n-2} + ... + c_ra_{n-r} = 0 ]

    其中,(c_r)不等于0

    其特征方程为:

    [m^r + c_1m^{r-1} + c_2m^{r-2} + ... + c_r = 0 ]

    若解得其全部互不相等的特征根为(m_1, m_2, ..., m_i),并且其重数分别为(e_1, e_2, ..., e_i(e_1 + e_2 + ... + e_i = r)),则递推关系式对应(m_i)部分的通解是:

    [H_i(n) = (B_0 + B_1 cdot n + ... + B_{e_i- 1} cdot n^{e_i-1})m_i^n ]

    从而,该常系数齐次递推关系式为:

    [a_n = H_1(n) + H_2(n) + ... + H_i(n) ]

    对于非齐次常系数递推关系式

    [a_n + c_1a_{n-1} + c_2a_{n-2} + ... + c_ra_{n-r} = f(n) ]

    其解为对应的其次常系数递推关系式的通解(ar{a_n})加上该非齐次常系数递推式的特解(a_n^*),即:

    [a_n = ar{a_n} + a_n^* ]

    而非齐次递推关系式

    [a_n + c_1a_{n-1} + c_2a_{n-2} + ... + c_ra_{n-r} = f(n) ]

    特解的常见形式有:

    • (f(n) = b)时,(a_n^* = An^k),其中1是k重特征根
    • (f(n) = b^n)时,(a_n^* = An^kb^n),其中b是k重特征根
    • (f(n) = n^s)时,(a_n^* = n^k(A_sn^s + A_{s-1}n^{s-1} + ... + A_1n + A_0)),其中1是k重特征根
    • (f(n) = b^nn^s)时,(a_n^* = n^kb^n(A_sn^s + A_{s-1}n^{s-1} + ... + A_1n + A_0)),其中b是k重特征根

    三 母函数的定义和性质

    3.1 母函数的定义

    对于数列(a_0, a_1, ..., a_n, ...)构造形式幂级数

    [G(x) = a_0 + a_1x + ... + a_nx^n + ... = sum_{n=0}^{infty}a_nx^n ]

    则称函数(G(x))是数列(a_0, a_1, ..., a_n, ...)的母函数

    3.2 母函数的性质

    设数列({a_n}, {b_n}, {c_n})的母函数分别为

    [A(x) = sum_{n=0}^{infty}a_nx^n ]

    [B(x) = sum_{n=0}^{infty}b_nx^n ]

    [C(x) = sum_{n=0}^{infty}c_nx^n ]

    则有
    性质1:若

    [b_n = egin{cases} 0 & n < l\ a_{n-l} & n ge l end{cases} ]


    (B(x) = x^l A(x))

    性质2:若(b_n = a_{n+l}),则

    [B(x) = x^{-l}left[ A(x) - sum_{k = 0}^{l-1}a_kx^k ight] ]

    性质3:若(a_n = b_n + c_n),则

    [A(x) = B(x) + C(x) ]

    性质4:若(b_n = n cdot a_n),则(B(x)= x cdot A'(x))

    性质5:若

    [a_n = b_0c_n + b_1c_{n-1} + ... + b_kc_{n-k} + ... + b_nc_0 = sum_{k=0}^{n}b_kc_{n-k} ]

    [A(x) = B(x) cdot C(x) ]

    3.3 母函数的幂级数展开形式

    常用的母函数的幂级数展开式有:

    [frac{1}{1-x} = 1 + x + x^2 + ... + x^n + ... ]

    [frac{1-x^{n+1}}{1-x} = 1 + x + x^2 + ... + x^n ]

    [frac{1}{1-ax} = 1 + ax + a^2x^2 + ... + a^nx^n + ... ]

    [frac{1}{1-x^r} = 1 + x^r + x^2r + ... + x^{nr} + ... ]

    [frac{1}{(1-x)^n} = 1 + C(n, 1)x + C(n+1, 2)x^2 + ... + C(n+k-1, k)x^n + ... ]

    [frac{1}{(1-x)^2} = 1 + 2x + 3x^2 + ... + (n+1)x^n + ... ]

    [frac{1}{1+x} = 1 - x + x^2 + ... +(-1)^n x^n + ... ]

    [frac{1}{(1+x)^n} = 1 - C(n, 1)x + C(n+1, 2)x^2 + ... +(-1)^k C(n+k-1, k)x^k + ... ]

    [e^x = 1 + frac{x}{1!} + frac{x^2}{2!} + ... + frac{x^n}{n!} + ... ]

    [e^{-x} = 1 - frac{x}{1!} + frac{x^2}{2!} + ... + (-1)^nfrac{x^n}{n!} + ... ]

    四 用母函数求解递推关系

    用母函数来求解递推关系的步骤如下:

    • 将递推关系式变成母函数方程
    • 求解母函数
    • 将母函数变成幂级数形式

    比如,有递推关系(a_n - 2a_{n-1} = 1, a_0 = 0),求(a_n)。解题过程如下:

    [egin{equation} egin{split} a_n - 2a_{n-1} = 1\ Rightarrow a_nx^n - 2xa_{n-1}x^{n-1} = x^n\ Rightarrow sum_{n=1}^{infty}a_nx^n - 2x sum_{n=1}^{infty}a_{n-1}x^{n-1} = sum_{n=1}^{infty}x^n\ Rightarrow (A(x) - a_0) - 2xA(x) = frac{1}{1-x} - 1\ Rightarrow A(x) = frac{x}{(1-x)(1-2x)}\ Rightarrow A(x) = frac{-1}{1-x} + frac{1}{1-2x}\ end{split} end{equation} ]

    所以,易知解为(a_n = 2^n - 1)

    五 用母函数求解计数问题

    5.1 母函数求解组合数

    ({M_1 cdot a_1, M_2 cdot a_2, ..., M_k cdot a_k})(r)可重组合的母函数为

    [G(x) = (x^0 + x^1 + ... +x^{M_1})(x^0 + x^1 + ... +x^{M_2})...(x^0 + x^1 + ... +x^{M_k}) ]

    (x^r)前的系数就是所求(r)可重组合数

    (M_i = 1)时,({a_1, a_2, ..., a_k})(r)无重组合数的母函数为

    [G(x) = (x^0 + x^1)^k = (1+x)^k = sum_{r=0}^{k}C(k, r)x^r ]

    同样,(x^r)前的系数就是所求(r)无重组合数

    (M_i = infty)时,({infty cdot a_1, infty cdot a_2, ..., infty cdot a_k})(r)可重组合数的母函数为

    [G(x) = (x^0 + x^1 + ... + x^n + ...)^k = frac{1}{(1-x)^k} = sum_{r=0}^{infty}C(k+r-1, r)x^r ]

    同样,(x^r)前的系数就是所求

    用母函数求解组合数应用举例。

    把4个相同的球放入5个不同的盒子里,要求第一、二、三每盒最多不超过1个,第四、五每盒最多不超过2个,求方法数的母函数

    [G(x) = (1+x)^3 cdot (1 + x + x^2)^2 ]

    展开式中(x^4)的系数为所求

    5.2 母函数求解排列数

    对于序列(a_0, a_1, ..., a_n, ...),函数

    [G_e(x) = a_0 + a_1 frac{x}{1!} + ... + a_n frac{x^n}{n!} + ... ]

    称为序列(a_0, a_1, ..., a_n, ...)的指数型母函数。

    与上述的使用母函数求解组合数类似,用母函数求解排列数有如下定理:
    (S={M_1 cdot a_1, M_2 cdot a_2, ......, M_k cdot a_k})(h_n)(S)(n-)排列数,则序列(h_0, h_1, ......, h_n, ......)的指数型母函数(G_e(x))

    [ig(1 + frac{x}{1!} + ... + frac{x^{M_1}}{M_1!}ig)ig(1 + frac{x}{1!} + ... + frac{x^{M_2}}{M_2!}ig)...ig(1 + frac{x}{1!} + ... + frac{x^{M_k}}{M_k!}ig) ]

    因此,当(n=M_1 + M_2 + ... +M_k)时,则(x^n)的系数为全排列数

    [ binom{n}{M_1M_2...M_k}frac{x^n}{n!} ]

    六 整数拆分问题

    (n)个物体全部分配到(m)个位置上的问题,根据物体和位置是否有区别可分为:

    • 整数的有序拆分(物体相同,位置不同)
    • 整数的无序拆分(物体相同,位置相同)
    • 集合的有序拆分(物体不同,位置不同)
    • 集合的无序拆分(物体不同,位置相同)

    6.1 整数的有序拆分

    对于整数的有序拆分,若不允许有空位出现,则拆分数(C_m(n))

    [C_m(n) = binom{n-1}{m-1} ]

    若允许出现空位,则拆分数(B_m(n))

    [B_m(n) = binom{n+m-1}{n} = binom{n+m-1}{m-1} ]

    6.2 整数的无序拆分

    对于整数的无序拆分,若允许有空位,则分配数为下列母函数展开式中(x^n)的系数

    [G(x) = frac{1}{(1-x)(1-x^2)...(1-x^m)} ]

    若不允许有空位,则分配数为下列母函数展开式中(x^n)的系数

    [G(x) = frac{x^m}{(1-x)(1-x^2)...(1-x^m)} ]

    6.3 集合的有序拆分

    对于集合的有序划分,若允许有空位,则分配方案数为(m^n)

    若不允许有空位,则分配方案数为

    [sum_{k=0}^n(-1)^k binom{n}{k}(n-k)^m ]

    6.4 集合的无序拆分

    对于集合的无序划分,若允许有空位存在,则分配方案数为

    [sum_{i=1}^{min(n,m)}frac{1}{i!}sum_{k=0}^i(-1)^k binom{i}{k}(i-k)^n ]

    若不允许空位的存在,则分配方案数为

    [frac{1}{m!}sum_{k=0}^m(-1)^k binom{m}{k}(m-k)^n ]

  • 相关阅读:
    PHP和Redis实现在高并发下的抢购及秒杀功能示例详解
    thinkphp整合系列之微信公众号支付
    JS之变量的运算
    (php)thinkphp3.2配置sql_server
    jyd数据结构
    mac终端下svn常用命令
    项目学习
    抛错
    phpunit
    Python
  • 原文地址:https://www.cnblogs.com/laizhenghong2012/p/10408954.html
Copyright © 2011-2022 走看看