zoukankan      html  css  js  c++  java
  • 组合数学

    二项式反演

    [f(n)=sum^{n}_{i=0}(-1)^iC^i_ng(i)<->g(n)=sum^n_{i=0}(-1)^iC^i_nf(i) ]

    [f(n)=sum^n_{i=0}C^i_ng(i)<->g(n)=sum^n_{i=0}(-1)^{n-i}C^i_nf(i) ]

    [f(k)=sum_{i=k}^nC_i^kg(i)<->g(k)=sum_{i=k}^n(-1)^{i-k}C_i^kf(i) ]

    第二类斯特林数

    (S^m_n)表示的是把 (n) 个不同的小球放在 (m)个相同的盒子里方案数。盒子不能为空

    也可以表示(S^m_n={^n_m})

    [S^m_n=S^{m-1}_{n-1}+mS^m_{n-1} ]

    性质:

    [n^m=sum^m_{i=0}S^i_m*i!*C^i_n ]

    理解:左边是 (m)个球可以任意放在 (n) 个盒子里的答案

    右边就是枚举有多少个盒子空着,然后组合数枚举一下。最后因为盒子不同所以要乘一个 (i!)

    通项公式:

    (f(n)=n^m,g(i)=S^i_m*i!)

    反演一下

    [S^n_m*n!=sum^n_{i=0}i^m*(-1)^{n-i}*C^i_n ]

    [ o S^n_m=sum^n_{i=0}frac{(-1)^{n-i}*i^m}{i!*(n-i)!} ]

    求法:发现是卷积形式,直接(NTT)

    与自然数幂的关系

    [sum(n)=sum^n_{i=0}i^k ]

    [=sum^n_{i=0}sum^k_{j=0}S^j_ki^{underline{j}} ]

    [=sum^k_{j=0}S^j_ksum^n_{i=0}i^{underline{j}} ]

    [=sum^k_{j=0}S^j_kj!sum^n_{i=0}C^j_i ]

    [=sum^k_{j=0}S^j_kj!C^{j+1}_{n+1} ]

    [=sum^k_{j=0}S^j_kfrac{(n+1)^{underline{j+1}}}{j+1} ]

    注:(sum^n_{i=0}C^j_i=C^{j+1}_{n+1}) 枚举(j+1)的右端点(i+1),则相当于从(i)个点中选(j)个点

    第一类斯特林数

    (s^m_n)表示的是把 (n) 个不同的小球串成 (m) 个项链(圆)的方案数

    也可以表示(s^m_n=[^n_m])

    [s^m_n=s^{m-1}_{n-1}+(n-1)s^m_{n-1} ]

    性质:

    [sum^n_{i=0}s^i_n=n! ]

    理解:一组圆排列对应一组置换

    求法:

    考虑(x^{overline{n}}=sum^{n}_{i=1}s_n^ix^i)

    上升幂即是这个数列的生成函数。

    [x^{overline{n}}=sum_{i=0}^{infty}s_{n}^{i}{x}^i ]

    所以我们把$ x^{overline{n}}$看成一个多项式,求出这个多项式的 (i) 次项系数就是 (s_{n}^{i})

    怎么求呢,暴力$ FFT(NTT)$求出 ((x) imes(x+1) imes...(x+n-1)) ,这样时间复杂度就是$ O(n^2log_2n)$

    用分治(FFT),时间复杂度是 (O(nlog^2_2n))

    (O(nlong_n))做法(类似多项式求逆):

    [F(x)^n=prod^{n-1}_{i=0}(x+i),F(x)^{2n}=F(x)^nF(x+n)^n ]

    求出(F(x)^n=sum^n_{i=0}a_ix^i)后:

    [F(x+n)^n=sum^n_{i=0}a_i(x+n)^i ]

    [=sum^n_{i=0}a_isum^i_{j=0}s^j_in^{i-j}x_j ]

    [=sum^n_{i=0}(sum^n_{j=i}n^{j=i}a_j)x^i ]

    [=sum^n_{i=0}(sum^n_{j=i}frac{j!}{i!(j-i)!}n^{j-i}a_j)x^i ]

    [=sum^n_{i=0}(i!)^{-1}x^i(sum^n_{j=i}(frac{n^{j-i}}{(j-i)!})*(j!a_j)) ]

    斯特林反演

    下降幂:({x}^{underline{i}}=prod_{j=0}^{i-1}(x-j))

    上升幂:$x{overline{i}}=prod_{j=0}{i-1}(x+j) $

    性质:

    (x^n=sum_{i=1}^nS_{n}^{i}{x}^{underline{i}})

    证明(数学归纳法):

    (n=1)时易证

    [x^n=x^{n-1}x=xsum_{i=1}^{n-1}S_{n-1}^{i}{x}^{underline{i}} ]

    由于$ {x}{underline{i+1}}={x}{underline{i}}(x-i)$

    [ herefore =sum_{i=1}^{n-1}S_{n-1}^{i}{x}^{underline{i+1}}+sum_{i=1}^{n-1}iS_{n-1}^{i}{x}^{underline{i}} ]

    由于$ S_n0=0,S_n{n+1}=0$

    [ herefore =sum_{i=1}^{n}S_{n-1}^{i-1}{x}^{underline{i}}+sum_{i=1}^{n}iS_{n-1}^{i}{x}^{underline{i}} ]

    [=sum_{i=1}^nS_{n}^{i}{x}^{underline{i}} ]

    另:

    [x^{underline n}=(-1)^n(-x)^{overline n},x^{overline n=(-1)^n(-x)^{underline n}} ]

    [x^n=sum^n_{i=1}S^i_nx^{underline{i}} ]

    [x^{overline{n}}=sum^n_{i=1}s^i_nx^i ]

    [x^n=sum^n_{i=1}S^i_n(-1)^{n-i}x^{overline{i}} ]

    [x^{underline{n}}=sum^n_{i=1}s_n^i(-1)^{n-i}x^i ]

    后面两个(−1)的幂次就对了呢

    比如

    (x^{underline{4}}=x^4-6x^3+11x^2-6x)

    (x^{overline{4}}=x^4+6x^3+11x^2+6x)

    反转公式:

    [sum^n_{k=m}(-1)^{n-k}s^k_nS^m_k=[m=n] ]

    [sum^n_{k=m}(-1)^{k-m}S^k_ns^m_k=[m=n] ]

    [m^{underline n}=sum^n_{i=0}s_n^i(-1)^{n-i}m^i ]

    [=sum^n_{i=0}s^i_n(-1)^{n-i}sum_{j=0}^iS^j_im^{underline j} ]

    [=sum^n_{i=0}m^{overline i}sum^n_{j=i}(-1)^{n-j}s^j_nS^i_j ]

    [m^n=sum^n_{i=0}S^i_nm^i ]

    [=sum^n_{i=0}S^i_n(-1)^i(-m)^i ]

    [=sum^n_{i=0}S^i_n(-1)^isum^i_{j=0}s^j_i(-m)^j ]

    [=sum^n_{i=0}m^isum^n_{j=i}(-1)^{i-j}S_n^js^i_j ]

    推式:

    已知:(g(n)=sum^n_{k=0}(-1)^{n-k}s^k_nf(k))

    [f(n)=sum^n_{k=0}[k=n]f(k) ]

    [=sum^n_{k=0}sum^n_{j=k}S^j_ns^k_j(-1)^{j-k}f(k) ]

    [=sum^n_{k=0}S_n^ksum^k_{j=0}(-1)^{k-j}s^j_kf(j) ]

    [=sum^n_{k=0}S^k_ng(k) ]

  • 相关阅读:
    2016年开源软件评选(截图备份)
    牛逼的思维方式都是倒逼出来的(摘)
    3-22 多态
    3 -20 类
    3 -19标准库
    3 -16 json序列化
    3 -16 内置方法
    迭代对象 和 迭代器
    3 -14 迭代 和列表 生成器
    3-13 装饰器
  • 原文地址:https://www.cnblogs.com/aurora2004/p/12624997.html
Copyright © 2011-2022 走看看