zoukankan      html  css  js  c++  java
  • 二项式反演

    话说好久没写博客了~~

    不久前一道考试题暴露了数学渣渣的本质:

    斯特林反演(不会)-> 善用搜索引擎 -> 容斥系数&原理(不会)-> 善用搜索引擎 -> 二项式反演(不会)->

    善用搜索引擎 -> 二项式定理(不会)-> 善用搜索引擎 -> 杨辉三角(打个表找规律终于会了)

    今天又有一道数学题,想骗个分结果exgcd不会写……

    最近有时间一定恶补数学

    二项式定理

    $(a+b)^n=sumlimits_{i=0}^nC_n^ia^ib^{n-i}$

    证明:

    n=1时显然成立

    我们设n=m时二项式定理成立

    那么只需证明n=m+1时成立,我们就可以推得n=2,3,……,+∞时二项式定理成立,即证明出了二项式定理对于一切正整数都成立,即证明了二项式定理。

    n=m时二项式定理成立,则$(a+b)^m=sumlimits_{i=0}^mC_m^ia^ib^{m-i}$

    那么有:egin{array}{lcl}(a+b)^{m+1} & = & a(a+b)^m+b(a+b)^m \& = & a sum limits_{i=0}^m C_m^ia^ib^{m-i}+b sum limits_{j=0}^mC_m^ja^jb^{m-j} \& = & sumlimits_{i=0}^mC_m^ia^{i+1}b^{m-i}+sumlimits_{j=0}^mC_m^ja^jb^{m-j+1} \ & = & a^{m+1}+sumlimits_{i=0}^{m-1}C_m^ia^{i+1}b^{m-i}+b^{m+1}+sumlimits_{j=1}^mC_m^ja^jb^{m-j+1} \ & = & a^{m+1}+sumlimits_{j=1}^mC_m^{j-1}a^jb^{m-j+1}+b^{m+1}+sumlimits_{j=1}^mC_m^ja^jb^{m-j+1} (用j表示i)\ & = & a^{m+1}+sumlimits_{j=1}^m(C_m^{j-1}+C_m^j)a^jb^{m-j+1}+b^{m+1} \ & = & a^{m+1}+sumlimits_{j=1}^mC_{m+1}^ja^jb^{m-j+1}+b^{m+1} \ & = & sumlimits_{j=0}^{m+1}C_{m+1}^ja^jb^{m-j+1}end{array}

    得证。

    至于杨辉三角和二项式定理有什么关系……

    自己打个表找个规律不就行了

    杨辉三角第n行的数对应$(a+b)^n$的各项系数

    杨辉三角还有不少神奇性质,不再一一列举

    二项式反演

    基本形式有一种对称美: $f_n=sumlimits_{i=0}^n(-1)^iC_n^ig_i Leftrightarrow g_n=sumlimits_{i=0}^n(-1)^iC_n^if_i$

    常见形式为$f_n=sumlimits_{i=0}^nC_n^ig_i Leftrightarrow g_n=sumlimits_{i=0}^n(-1)^{n-i}C_n^if_i$

    还有一个是$f_k=sumlimits_{i=k}^nC_i^kg_i Leftrightarrow g_k=sumlimits_{i=k}^n(-1)^{i-k}C_i^kf_i$

    我们来证明第一个常见形式。

     我们已知$f_n=sumlimits_{i=0}^nC_n^ig_i$

    那么egin{array}{lcl}sumlimits_{i=0}^n(-1)^{n-i}C_n^if_i & = & sumlimits_{i=0}^n(-1)^{n-i}C_n^isumlimits_{j=0}^iC_i^jg_j \& = & sumlimits_{i=0}^nsumlimits_{j=0}^i(-1)^{n-i}C_n^iC_i^jg_j \ & = &sumlimits_{i=0}^nsumlimits_{j=0}^i(-1)^{n-i}C_n^jC_{n-j}^{i-j}g_j end{array}

    对于$sumlimits_{i=0}^nsumlimits_{j=0}^i$来说,其代表$iin[0,n],jleq i$的所有情况

    事实上其等价于$jin[0,n],ige j$的所有情况(感性理解吧,我也不知道怎么说才更清楚)

    那么 $ 原式 =  sumlimits_{j=0}^nsumlimits_{i=j}^n(-1)^{n-i}C_n^jC_{n-j}^{i-j}g_j $

    显然对于j=n时$sumlimits_{i=j}^n(-1)^{n-i}C_n^jC_{n-j}^{i-j}g_j$的值为$g_n$

    对于j!=n时,我们考虑g_j的系数$ sumlimits_{i=j}^n(-1)^{n-i}C_n^jC_{n-j}^{i-j}$

    首先对于一个固定的j来说$C_n^j$就是一个常数,我们将其删去,$g_j$的系数变为$ sumlimits_{i=j}^n(-1)^{n-i}C_{n-j}^{i-j}$

    显然n-j也是个常数,我们设m=n-j

    然后我们再将i变为[0,m],可以理解为向左平移

    那么系数变为$sumlimits_{i=0}^m(-1)^{m-i}C_m^i$

    有没有觉得很眼熟?

    考虑二项式定理$(a+b)^n=sumlimits_{i=0}^nC_n^ia^ib^{n-i}$,我们令a=1,b=-1,n=m,有$0=sumlimits_{i=0}^mC_m^i(-1)^{m-i}$,而这个式子就是$g_j$的系数

    于是对于所有j!=n的情况,$g_i$的系数都为0,只有j=n时$g_i$的系数和为1

    那么$sumlimits_{j=0}^nsumlimits_{i=j}^n(-1)^{n-i}C_n^jC_{n-j}^{i-j}g_j = g_n $

    即$sumlimits_{i=0}^n(-1)^{n-i}C_n^if_i=g_n$,得证。

    应用主要有恰好与至多,恰好与至少的转换。

    一类很典型的问题叫错排问题,可以用二项式反演解决。

    不过二项式反演能做的一般直接用容斥+感性理解也能怼出来

    例题:bzoj2839 集合计数

    设$f_i$表示交集元素至少为i的方案数,$g_i$表示交集元素恰好为i的方案数(有坑,请读者留意)

    对于$f_i$,我们考虑先从n个元素中选出i个必选的,共有$C_n^i$种方案,然后还剩下n-i种元素可以组成$2^{n-i}$个集合

    (含空集,在确定集合后每个集合在加上钦定的i个元素才构成最终的集合)

    对于这些集合,我们可以选也可以不选,但由题意可知不能都不选(至少选一个),于是有$2^{2^{n-i}}-1$种方案

    那么有$f_i=C_n^i(2^{2^{n-i}}-1)$

    完了吗?

    如果$f_i$的定义就是交集元素至少为i的方案数,那么这么算是错误的,因为这样会把一种情况重复计算多次。

    (网上其他这么说的题解都是错的,我不知道是抄的还是真理解错了,害得我懵了好久)

    (也可能是我这个蒟蒻理解错了,如果有大佬能指出的话,万分感谢&顶礼%bai)

    举个例子,n=3,我们求出$f_i=9$,但事实上$f_i=7$,因为{A,B,C}这个集合被计算了3次。

    实际上$f_i$真正的含义是所有交集为固定i个数的方案数的总和。

     那么对于$f_i$和$g_i$,显然有$f_i=sumlimits_{j=i}^nC_j^ig_j$,因为$g_j$的每一种方案交集中的j个数都对应$f_i$中的$C_j^i$种钦定方案。

    那么由二项式反演的第二个常用形式可以推得$g_i=sumlimits_{j=i}^n(-1)^{j-i}C_j^if_j$

    可以$Theta(N)$计算出来了。

    当然本题用容斥也可以解决。(巨神skyh的题解

    代码就不放了,请自己思考(其实博主是用容斥写的

    完结撒花= =

  • 相关阅读:
    Qt 获取文件夹下所有文件
    [MAC OS] 解压Assets.car获取资源图片
    [Mac OS] Homebrew简介及安装wine
    [Android Pro] Android7.0系统 关于Android获取流量计数TrafficStats.getUidRxBytes(uid)和TrafficStats.getUidTxBytes(uid)返回-1解决方案
    [Android Pro] git 打标签、推送tag到托管服务器、验证是否成功
    [Android Pro] 分析 Package manager has died
    [Android Pro] Android 必知必会-使用 supportV4 的 RoundedBitmapDrawable 实现圆角
    [Linux] du-查看文件夹大小-并按大小进行排序
    [Android Pro] Android异步任务处理之AsyncTaskLoader的使用
    [Android] charles高级使用总结
  • 原文地址:https://www.cnblogs.com/remarkable/p/11342576.html
Copyright © 2011-2022 走看看