• 反演原理及二项式反演


    反演魔术:反演原理及二项式反演

     g_n = sum_{i=0}^n a_{ni}f_i

    反演过程就是利用 g_0, g_1, cdots, g_n来表示出 f_n

     f_n = sum_{i = 0}^n b_{ni}g_i

    这样的话,我们只需要知道{g_n}的求解方法和{g_n}{f_n}的关系,就可以快速求解{f_n}

    本质上来说,反演其实是一个解线性方程组的过程,但是你观察后发现,这个矩阵实际上是一个三角矩阵,那必然存在着快捷的方法。对于使得这两个反演公式成立的这些系数应该满足什么条件呢?我们现在就来探讨一番!

    我们首先讨论一下在什么情况下能够比较容易建立反演公式,之后介绍二项式反演以及它的两个应用,其中一个是错位排列问题

    反演原理

    首先我来介绍一个 delta_{ij}函数,这个函数被称为 Kronecker's delta,它是这样定义的

     delta_{ij}
=
left {
egin{eqnarray*}
0 ~ ~ ~ ,i 
eq j\
1 ~ ~ ~ ,i = j
end{eqnarray*}

ight .

    这个函数的定义非常简单,我介绍它完全是为了后面叙述的方便

    好,我们现在来考虑一下上面的式子,假设对于任意 0 leq n leq N都满足

     g_n = sum_{i=0}^n a_{ni}f_i

    那么我们来考虑一下下面这个式子成立应该要满足什么条件

     egin{equation} label{inversion-2} sum_{i = 0}^n b_{ni}g_i = f_n end{equation}                           $(1)$

    我们可以直接将 g_i代入上式来计算左边的求和

     egin{eqnarray*}
& & sum_{i=0}^n b_{ni}g_i \
&=& sum_{i=0}^n b_{ni} sum_{j=0}^i a_{ij}f_j \
&=& sum_{i=0}^n f_i sum_{j=i}^n b_{nj}a_{ji}
end{eqnarray*}

    对于最后一步,实际上是变换了求和顺序,为了更容易理解,我按照矩阵的形式写出来

    那么,前一个求和是先对行进行,再将各行加起来,后一个就是先对列进行,再将各列加起来

    这样的话,等式$1$成立的充要条件就是

     sum_{j=i}^n b_{nj}a_{ji} = delta_{ni}

    同样地,我们反过来也能知道,整个反演公式要成立还需要满足一个必要条件

     sum_{j=i}^n a_{nj}b_{ji} = delta_{ni}

    也就是,如果你发现某个数列满足上面这个条件,那么你就可以直接建立起反演公式!

    事实上,在快速傅立叶变换和逆变换你也可以认为是一个反演的过程,具体可以看这一步的推导,你会发现它和这个很相似。此外,第一类 Stirling 数和第二类 Stirling 数也满足这个条件,不过我暂时没有发现它们建立起的反演公式有什么应用。我下面来介绍一个比较有用的反演公式

    二项式反演

    下面就来介绍二项式反演(binomial inversion),这可以表示成

     f_n = sum_{i=0}^n (-1)^i {n choose i} g_i Leftrightarrow g_n = sum_{i=0}^n (-1)^i {n choose i} f_i

    你会发现这个式子具有极强的对称性!另外一个更加常见的形式是

     f_n = sum_{i=0}^n {n choose i} g_i Leftrightarrow g_n = sum_{i=0}^n (-1)^{n-i} {n choose i} f_i

    现在我们先来给出这个公式的一个容斥解释,之后从代数角度证明一下这个式子,最后介绍两个它的应用

     

    代数证明

     

    根据文章开头反演原理部分的讨论,加上这个公式的对称性,我们只需要证明

     

     sum_{i=j}^n (-1)^{i+j} {n choose i}{i choose j} = delta(i, j)

     

    这里 a_{ni} = (-1)^i { n choose i }, b_{ij} = (-1)^j { i choose j }

     

    好,现在我们来证明它,首先需要一个二项式系数的知识

     

    如果运用组合推理就相当于是,你有一个 n元素集 U,现在对 (A, B)进行计数,其中 B subseteq A subseteq U且 |A| = i, |B| = j,首先对 A计数,U的 i子集有 n choose i,然后对 B计数,A的 j子集有 i choose j

     

    接下来换一种方式,先对 B进行计数,B显然是 U的子集,有 n choose j种方案,由于要求 B subseteq AB中 j个元素必须在 A中,A还剩下 i - j个不确定的元素,U还有 n - j个可以用的元素,一共有 {n - j} choose {i - j}种,于是就得到上面的恒等式,那么可以得到

     

    这样最后就可以得到

     

    于是,反演公式就建立了!

     

    容斥原理证明

    实际上,二项式反演是容斥原理(inclusion-exclusion principle)的一种最常见的特例子,让我们先来回忆一下容斥原理

    设集合 S中具有性质 P_1, P_2, cdots, P_n的对象的集合为 A_1, A_2, cdots, A_n,那么不具有这些性质的对象的集合大小为

    那么,考虑这样一种特殊的情况,若对于集族 mathcal{U} = {A_1, A_2, cdots, A_n}中任意 i个集合的并集的大小都是 g_i,我们不妨设

     g_i = |A_1 cap A_2 cap cdots cap A_n|

    明显的,在 mathcal{U}中一共有 n choose i个这样的不同交集。另外,我们定义 g_0 = |S|

    这样一来,上面的容斥结果就是

     egin{eqnarray*}
& &|overline{A_1} cap overline{A_2} cap cdots cap overline{A_n}| \
&=& g_0 - {n choose 1} g_1 + {n choose 2} g_2 + cdots + (-1)^n {n choose n} g_n
end{eqnarray*}

    由于 mathcal{U}中任意 i个集合的交集大小都是 g_i,上面的公式左边的项也只和集合个数有关,我们可以设

     f_i = |overline{A_1} cap overline{A_2} cap cdots cap overline{A_i}|

    同样令 f_0 = |S|,那么同样使用容斥原理

    这也正是 g_n的表达式,因此,整个证明就完成了!

    应用

    错位排列问题

    求有多少个长度为 n的排列 a_1, a_2, cdots, a_n,满足对于所有的 1 leq i leq n,使得 i 
eq a_i

    这个问题有很多解法,我们来介绍一个有意思的解法:

    为了叙述方便,我们称位置 i不变的当且仅当 a_i = i

    首先我们知道,如果不考虑 i 
eq a_i这个条件,问题是很简单的,长度为 n的排列一共有 n! 种。并且这些排列是由恰好有 k(k = 0, 1, 2, cdots, n)个位置是不变的排列组成,也就是,如果我们设 f_i恰好有 i个位置是不变的排列的个数,那么可以得到

     n! = sum_{i=0}^n {n choose i} f_i

    是否觉得和刚刚的反演公式很相似?这里的 g_i就是  i! ,那么,使用二项式反演可以得到

    
egin{eqnarray*}
f_n &=& sum_{i=0}^n (-1)^{n+i} {n choose i} i! \
&=& sum_{i=0}^n (-1)^{n+i} frac{n!}{(n-i)!} \
&=& n!sum_{i=0}^n frac{(-1)^{i}}{i!} \
end{eqnarray*}

    这也就是我们熟悉的错位排列

    球染色问题

    有 n个球排成一行,你有 k种颜色,要求给每一个球染色,相邻两个球颜色不可以相同,并且每种颜色至少使用一次

    这是经常在高中数学组合那个部分见到的一个问题,只不过高中题目中数都很小

    还是和刚刚的想法一样,如果没有每种颜色至少一次这个条件,那么问题很简单,答案是 k(k-1)^{n-1}。这些方案是由恰好使用了 i(i=0, 1, 2, cdots, k)种颜色的方案组成的,那么设 f_i恰好使用了 i种颜色的方案数,可以得到

     k(k-1)^{n-1} = sum_{i=0}^k {k choose i} f_i

    经过反演得到

     f_k = sum_{i=2}^k (-1)^{k+i} {k choose i} i(i-1)^{n-1}

     

    例题

    【题解】Luogu P5400 [CTS2019]随机立方体

  • 相关阅读:
    SSD报告
    House of Spirit学习调试验证与实践
    怎样改动SharePoint管理中心的语言
    PuTTY连接Linuxserver常常断线解决方式
    HDU 2819 Swap (行列匹配+输出解)
    HDOJ--1061--Rightmost Digit
    POJ Cow Exhibition
    程序员之---C语言细节24(段错误、类型提升、sizeof 'A')
    java之 ------ 图形界面(三)
    Oracle 安装报错 [INS-06101] IP address of localhost could not be determined 解决方法
  • 原文地址:https://www.cnblogs.com/guoshaoyang/p/10975549.html
Copyright © 2020-2023  润新知