zoukankan      html  css  js  c++  java
  • 广义容斥-二项式反演-容斥系数

    对所谓“至少满足i个条件的Q(i)”及其与P(j)关系的真正理解

    下面的内容是很久以前写的,过了这么久看前面容斥系数(二项式反演)的复习的时候突然对一些二项式系数意义不明白了,于是特地来写个博客搞一搞。

    众所周知我们容斥的时候往往会预先从(n)个元素中钦点(i)个,然后剩下的元素状态任意,来计算所谓“满足至少(i)个元素的方案数(即(Q(i)))”

    我们尝试理解(Q(i)(ileq j))对某个恰好满足(j)个条件的方案数(P(j))的影响

    (Q(i))已经钦点了(i)个元素,这其中也包括了(P(j))所满足(j)个条件中的(i)个,还需要在剩下的(n-i)个元素中钦点(j-i)个,于是就有(inom{n}{i}inom{n-i}{j-i}),但是这样是有重复计数的,我们来尝试化简式子,使他尽量满足携带(inom{n}{j})

    [inom{n}{i}inom{n-i}{j-i}\ egin{aligned} &=frac{n^{underline i}}{i!}frac{{(n-i+1)}^{underline {j-i}}}{(j-i)!}\ &=frac{n^{underline i}}{i!}frac{{(n-i+1)}^{underline {j-i}}}{(j-i)!}frac{j^{underline i}}{j^{underline i}}\ &=frac{n^{underline j}}{j!}frac{j^{underline i}}{i!}\ &=inom{n}{j}inom{j}{i} end{aligned} ]

    所以对于每个(P(j))(Q(i))中被计算了(inom{j}{i})

    还有另外一种解释,考虑一种具体的包括(j)种方案的状态(S),一开始在(n)个限制中钦点(i)个,会包含这(S)(j)个中(i)个的方案数明显是(inom{j}{i}),但事实上我们对于一种确定由哪些限制组成的方案(S)只需要钦点一次

    而后面(n-i)个限制都处于任意的状态,于是一定有对应的满足情况,所以一个准确的包含了(j)个限制的状态(S)也就被计算了(inom{j}{i})次,这也代表着一个(P(j))(Q(i))中被计算了(inom{j}{i})

    容斥系数的构造

    接着来看二项式反演

    目的是求恰好满足(k)个要求的方案数(P(k))

    考虑还是用满足至少(i)个条件的(Q(i)),不过要为原来的式子构造容斥系数(alpha(j))

    [sum_{i=0}^{n}inom{n}{i}alpha(i)Q(i) ]

    可以考虑(P(i)​)被算了几次。

    [sum_{i=0}^{n}inom{n}{i}alpha(i)Q(i)=sum_{i=0}^n{P(i)sum_{j=0}^ninom{i}{j}alpha(j)} ]

    目的是强制使得(P(k)=sum_{i=0}^n{P(i)sum_{j=0}^ninom{i}{j}alpha(j)})成立。

    所以容斥系数的效果实际上就是

    [sum_{j=0}^ninom{i}{j}alpha(j)=[i==k] ]

    发现(j>i)时其实没用,变成(sum_{j=0}^iinom{i}{j}alpha(j)=[i==k])

    (alpha(i))单独丢出来,发现可以(n^2)搞出每个容斥系数,即

    [alpha(i)=[i==k]-sum_{j=0}^{i-1}inom{i}{j}alpha(j) ]

    恰好满足(k)个要求的方案数对应的(alpha(i))对应的可以取(alpha(j)=inom{j}{k}(-1)^{j-k})

    (i<k)时式子始终为(0),当(igeq k)时有

    [egin{aligned} & sum_{j=0}^iinom{i}j{}alpha(j)\ = & sum_{j=0}^i{inom{i}{j}inom{j}{k}(-1)^{j-k}}\ = & sum_{j=k}^{i}inom{i}{j}inom{j}{k}(-1)^{j-k}\ = & sum_{j=0}^{i-k}{inom{i}{j+k}inom{j+k}{k}(-1)^j}\ = & sum_{j=0}^{i-k}frac{i^{underline{j+k}}(j+k)^{underline{k}}}{(j+k)!k!}(-1)^j\ = & sum_{j=0}^{i-k}frac{i^{underline{k}}(i-k)^{underline{j}}(j+k)^{underline{k}}}{k!(j+k)^{underline{k}}j!}(-1)^j\ = & inom{i}{k}sum_{j=0}^{i-k}frac{(i-k)^{underline{j}}}{j!}(-1)^j\ = & inom{i}{k}sum_{j=0}^{i-k}inom{i-k}{j}(-1)^j\ = & [i-k==0]\ = & [i==k] end{aligned} ]

    二项式反演

    其实上面讲的是二项式反演的另一种形式(雾

    [f(n) = sum_{i = 0}^{n}{g(i)inom{n}{i}} Longleftrightarrow g(n) = sum_{i = 0}^n{(-1)^{n-i}inom{n}{i}f(i)} ]

    证明

    [egin{aligned} g(n) =& sum_{i = 0}^n{(-1)^{n-i}inom{n}{i} sum_{j = 0}^{i}{g(j) inom{i}{j}}}\ =& sum_{j = 0}^n{g(j) sum_{i = j}^{n}{(-1)^{n - i} inom{n}{i}inom{i}{j} }}\ =& sum_{j = 0}^n{g(j)sum_{i = j}^{n}{(-1)^{n - i}inom{n}{j} inom{n - j}{i - j}}}\ =& sum_{j = 0}^n{g(j)inom{n}{j}sum_{i = j}^{n}{(-1)^{n - i}inom{n - j}{i - j}}}\ =& sum_{j = 0}^n{g(j)inom{n}{j}(-1+1)^{n-j}}\ =& inom{n}{n}g(n) \ =&g(n)\ end{aligned} ]

    所以这个是正确的。

    意义:(先证明再说意义还行

    (f(n))一般情况下代表至多满足(n)个条件的方案数,对应地,(g(n))表示恰好满足(n)个条件的方案数。

    当然有时候其实是反过来的,定义(f(i))是至少满足(i)个约束的方案数,(g(n))是恰满

    (n)个约束的方案数,那么:

    [g(k)=sum_{i=k}^n{(-1)^{i-k}inom{i}{k}inom{n}{i}f(i)} ]

    证明就是一开始提到的构造容斥系数(alpha(j))那一坨

  • 相关阅读:
    什么是多线程中的上下文切换?
    什么是基本表?什么是视图?
    什么是存储过程?用什么来调用?
    随意写文件命令?怎么向屏幕输出带空格的字符串,比如” hello world”?
    NULL 是什么意思 ?
    Mock 或 Stub 有什么区别?
    什么叫视图?游标是什么?
    什么是微服务中的反应性扩展?
    什么是线程组,为什么在 Java 中不推荐使用?
    Java 中用到的线程调度算法是什么?
  • 原文地址:https://www.cnblogs.com/cjc030205/p/11638086.html
Copyright © 2011-2022 走看看