• 关于反演原理以及一个例子:二项式反演(世界上最垃圾的组合数学2)(坑)


    @

    前言

    准备期末考就不做题了吧。。。

    填一点坑。

    反演原理

    为了下文方便,我们定义一个函数(U_{i,j}=[i=j]),其中([q]) 表示(q)成立时值为(1),反之值为(0)

    首先我们有一个数列(a),以及一个二元函数(f_{i,j}),以及一个已经知道的数列(b)

    (a)的生成法则为:(a_{i}=sumlimits_{j=0}^{i}f_{i,j}b_{j}①)

    那么假如我们直到了(a),能不能通过类似得生成法则倒推回(b)呢(这也就意味着在这个生成法则上,任意一个(a)数列都对应着一个(b)数列,有点反函数的味道),这个过程就叫反演。

    假定也有一个函数(g)

    那么(b_{i}=sumlimits_{j=0}^{i}g_{i,j}a_{j}②)

    那么我们把(①)带入(②)中得:

    (b_{i}=sumlimits_{j=0}^{i}g_{i,j}sumlimits_{k=0}^jf_{j,k}b_{k})

    (b_{i}=sumlimits_{j=0}^{n}b_{j}sumlimits_{k=j}^{n}g_{i,k}f_{k,j}③)

    那么,一个比较明显的事情就是如果两边需要相等的话,那么需要:

    (sumlimits_{k=j}^ig_{i,k}f_{k,j}=U_{i,j})

    那么能不能证明如果不满足这个就会爆掉???

    如果(j=i)(sumlimits_{k=j}^ig_{i,k}f_{k,j})不等于(1),那么直接其余(b)(0),就可以让③不成立,同理,如果(j≠i)时,(sumlimits_{k=j}^ig_{i,k}f_{k,j})不等于(0),那么除(j)以外(b)都取(0),照样不行,所以只有满足上述式子,这条式子才能成立。

    这个就是充要条件:

    (∀i,j∈N且0≤j≤i,sumlimits_{k=j}^ig_{i,k}f_{k,j}=U_{i,j})

    当然,在参考资料的核心文章中提到了一个必要条件:

    (∀i,j∈N且0≤j≤i,sumlimits_{k=j}^if_{i,k}g_{k,j}=U_{i,j})

    但是我暂且没有找到这两条式子的关系。。。。是我太菜了。

    二项式反演

    公式1

    一群神仙就想到了组合数跟这条式子不谋而合。

    如果设定(f_{i,j}=(-1)^jC_{i}^{j},g_{i,j}=(-1)^jC_{i}^{j}),上述的式子竟然就可以完美的成立?

    具体式子列出来:(a_{i}=sumlimits_{j=0}^{i}(-1)^jC_{i}^jb_{j}),那么(b_{i}=sumlimits_{j=0}^{i}(-1)^jC_{i}^ja_{j})

    那么这个式子要怎么去证明了?

    其实就是证明:

    (∀i,j∈N且0≤j≤i,sumlimits_{k=j}^i(-1)^{k+j}C_{i}^kC_{k}^j=U_{i,j})

    运用恒等式:(C_{i}^kC_{k}^j=C_{i} ^{j}*C_{i-j}^{i-k})

    变成:(C_{i}^jsumlimits_{k=j}^i(-1)^{k +j}C_{i-j}^{i-k})
    发现(i-k)的范围在([0,i-j]),化成:
    变成:(C_{i}^jsumlimits_{k=0}^{i-j}(-1)^{(i-k)+j}C_{i-j}^{k})

    不难发现,在(i=j)时,式子等于(1),反之等于(0),成立。

    证毕。

    公式2

    (a_{i}=sumlimits_{j=0}^{i}C_{i}^jb_{j}),那么(b_{i}=sumlimits_{j=0}^{i}(-1)^{i-j}C_{i}^ja_{j})

    这个证明利用公式1就行了,设(h_{i}=b_{i}*(-1)^i)

    那么(a_{i}=sumlimits_{j=0}^iC_{i}^jh_{j},frac{h_{i}}{(-1)^i}=sumlimits_{j=0}^i(-1)^jC_{i}^ia_{i})

    化简一下就可以证明完毕。

    公式3

    定义一个上界(limit)

    由于感觉把(i)换成(n)更加好看,所以换成(n)

    (a_{n}=sumlimits_{i=n}^{limit}C_{i}^nb_i)(b_{n}=sumlimits_{i=n}^{limit}(-1)^{i-n}C_{i}^na_{i})

    这条式子看起来特别难证明,因为和上面的式子不一样,但是如果我们换一下形式呢?比如把(a,b)翻转一下:

    (a_{limit-n}=sumlimits_{i=0}^{limit-n}C_{limit-i}^{n}b_{i})(b_{limit-n}=sumlimits_{i=0}^{limit-n}(-1)^{limit-i-n}C_{limit-i}^{n}a_{i})

    然后再用(k)代替(limit-n),那么(n=limit-k)

    (a_{k}=sumlimits_{i=0}^{k}C_{limit-i}^{limit-k}b_{i})(b_{k}=sumlimits_{i=0}^{k}(-1)^{k-i}C_{limit-i}^{limit-k}a_{i})

    也就是:
    (a_{n}=sumlimits_{i=0}^{n}C_{limit-i}^{limit-n}b_{i})(b_{n}=sumlimits_{i=0}^{n}(-1)^{n-i}C_{limit-i}^{limit-n}a_{i})

    进一步化简:
    (a_{n}=sumlimits_{i=0}^{n}C_{limit-i}^{limit-n}b_{i})(b_{n}=sumlimits_{i=0}^{n}(-1)^{n-i}C_{limit-i}^{limit-n}a_{i})

    这样子,就比较好证明了:

    (g_{i,j}=(-1)^{i-j}C_{limit-j}^{limit-i},f_{i,j}=C_{limit-j}^{limit-i})

    (∀i,j∈N且0≤j≤i,sumlimits_{k=j}^i(-1)^{i-k}C^{limit-i}_{limit-k}C_{limit-j}^{limit-k}=U_{i,j})

    (sumlimits_{k=j}^i(-1)^{i-k}C^{limit-i}_{limit-k}C_{limit-j}^{limit-k}=C_{limit-j}^{limit-i}sumlimits_{k=j}^i(-1)^{i-k}C_{i-j}^{k-j}=C_{limit-j}^{limit-i}sumlimits_{k=j}^i(-1)^{i-k}C_{i-j}^{i-k}=C_{limit-j}^{limit-i}sumlimits_{k=0}^{i-j}(-1)^kC_{i-j}^k=U_{i,j})

    证毕。

    参考资料

    核心文章:http://blog.miskcoo.com/2015/12/inversion-magic-binomial-inversion
    二项式反演的参考资料:
    https://www.cnblogs.com/sdzwyq/p/9920531.html
    https://www.cnblogs.com/lcyfrog/p/11772757.html
    https://www.cnblogs.com/GXZlegend/p/11407185.html

    1. 反演原理中关于两种条件他们之前的关系
    2. 我需要添加组合意义。
  • 相关阅读:
    CentOS 6.5下安装MySQL 5.6.21
    Java文件实时监控Commons-io
    quartz 实例记录
    Quartz任务调度快速入门(转)
    MySQL日期时间函数大全(转)
    struts2 jsp 传参 NullPointerException问题解决
    hibernate cascade=CascadeType.All
    struts2 学习记录 过滤器 国际化
    struts2 struts1.x 区别
    学习 自己的过滤器和监听器
  • 原文地址:https://www.cnblogs.com/zhangjianjunab/p/14188491.html
Copyright © 2020-2023  润新知