学习笔记:反転魔法

学习笔记:反転魔法

1. 反演是什么?

反演这个词,意思是两个函数(当然也可以是数列一类的东西)的 双向求和 关系。

比如已知 \(f(i)=\sum \limits_{j=0}^{+\infty} A(i,j) \times g(j)\),然后推出 \(g(i)=\sum \limits_{j=0}^{+\infty}B(i,j) \times f(j)\),这就是一对反演关系。

那么反演成立需要一定的条件,可以直接带入式子看一看:

\[\begin{eqnarray} f(i) &=&\sum \limits_{j=0}^{+\infty}{A(i,j)\times {\sum\limits_{k=0}^{+\infty}B(j,k) \times f(k)}} \\ &=&\sum \limits_{j=0}^{+\infty}{\sum\limits_{k=0}^{+\infty}A(i,j)\times B(j,k) \times f(k)} \\ &=&\sum \limits_{k=0}^{+\infty}{f(k) \times \sum\limits_{j=0}^{+\infty} A(i,j)\times B(j,k)} \\ \end{eqnarray} \]

显然,反演成立,当且仅当 \(\sum \limits _{j=0}^{+\infty} A(i,j) \times B(j,k)=[i=k]\)

另一种看法是:把 \(A\)\(B\) 看作两个系数矩阵,那么反演成立当且仅当这两个矩阵互逆。

这种看法有一些好处,因为可以用上矩阵的性质,如:

  • 两个互逆矩阵的转置依然互逆,\(({A}^\top)^{-1}=(A^{-1})^\top\)
  • 两个可逆矩阵的乘积依然可逆,且为这两个矩阵的逆的乘积,\((AB)^{-1}=A^{-1}B^{-1}\)

当然直接在式子上看也是对的,不过矩阵更直观。

有了反演,我们就能把一个不是很好求的式子 \(f\),转化成求另一个较好求又与 \(f\) 有反演关系的式子 \(g\),再反演推回 \(f\)

这么说有点抽象,不过确实是这个样子。

这里列一下反演的一点性质,有些时候可以方便推式子。

  1. \[\sum \limits _{j=0}^{+\infty} {-1}^{i-j} \times A(i,j) \times B(j,k)=[i=k] \iff \sum \limits _{j=0}^{+\infty} {-1}^{j+k} \times A(i,j) \times B(j,k)=[i=k] \]

    这个可以把两边同时乘上 \({-1}^{k-i}\) 得到,注意 \({-1}^{-j}={-1}^j\)

    这个在一些题里面,可以凑 \(-1\) 的系数。

    当然其他类似的操作也是可以的,只要两边依然等价。

  2. \[f(x_1,x_2,\cdots,x_n)=\sum \limits_{i_1=0}^{+\infty}\sum \limits_{i_2=0}^{+\infty}\cdots\sum \limits_{i_n=0}^{+\infty} \prod \limits_{p=1}^{n}A_p(x_p,i_p)\times g(i_1,i_2,\cdots,i_n) \iff g(x_1,x_2,\cdots,x_n)=\sum \limits_{i_1=0}^{+\infty}\sum \limits_{i_2=0}^{+\infty}\cdots\sum \limits_{i_n=0}^{+\infty} \prod \limits_{p=1}^{n}B_p(x_p,i_p)\times f(i_1,i_2,\cdots,i_n) \]

    这个是高维反演,意思就是 总的系数等于每一维系数的积

    证明不会,可以感性,或者是唠嗑一下这样形式的系数对应矩阵依然互逆。

2. 入门:二项式反演

属于是最基础的一类,基于二项式定理。

基本形式:

\[f(i)=\sum\limits_{j=0}^{i}{-1}^j {i \choose j} g(j) \iff g(i)=\sum \limits_{j=0}^{i}{-1}^j{i \choose j} g(j) \]

长得出奇地对称。

这里 \(A(i,j)=B(i,j)={-1}^j \times {i \choose j}\)

考虑证明:

\[\begin{eqnarray} A(i,j)\times B(j,k)&=& -1^i {i\choose j} \times -1^k {j\choose k} \\ &=& -1^{i+k}{i \choose j} {j \choose k} \end{eqnarray} \]

不是很好做,因为两个组合数有关系。

不过我们可以把组合数拆开,使用这个公式:

\[\begin{eqnarray} {n\choose m}\times{m\choose r}&=& \frac{n! \times m!}{m! \times (n-m)! \times r! \times (m-r)!} \\ &=& \frac{n!}{(n-m)! \times r! \times (m-r)!} \\ &=& \frac{n!}{r! \times (n-r)!} \times \frac{(n-r)!}{(n-m)! \times (m-r)!} \\ &=& {n\choose r} {n-r \choose n-m} \end{eqnarray} \]

这样 \(j\) 就可以被提出来,这次我们加上外面的和式(注意 \(j<k\) 时系数直接为 \(0\),所以从 \(k\) 开始):

\[\begin{eqnarray} \sum\limits_{j=k}^{n} A(i,j)\times B(j,k)&=& \sum\limits_{j=k}^{n} -1^{i+k}{i \choose j} {j \choose k} \\ &=& \sum\limits_{j=k}^{n} -1^{i+k}{i\choose k}{i-k\choose i-j} \\ &=& -1^k{i\choose k} \sum\limits_{j=k}^{n} -1^i{i-k\choose i-j} \end{eqnarray} \]

似乎还是不可做,但不要忘记我们这是二项式反演,我们可以往二项式定理上面靠:

\[\begin{eqnarray} \sum\limits_{j=k}^{n} A(i,j)\times B(j,k)&=& -1^k{i\choose k} \sum\limits_{j=0}^{i-k} -1^{i-j}{i-k\choose i} \end{eqnarray} \]

这里是 \(j\)\(k\) 对称到 \(0\),现在就是二项式定理的样子了,展开则有:

\[\begin{eqnarray} \sum\limits_{j=k}^{n} A(i,j)\times B(j,k)&=& -1^{i+k}{i\choose k}(1-1)^{i-k} \end{eqnarray} \]

虽然很怪异,但是 \(0^0\) 在我们的计算中,它被认为是等于 \(1\) 的。

由上我们就得到了二项式反演的基本形式……

二项式反演的不同形式:

  • \[f(i)=\sum\limits_{j=0}^{i}{i\choose j}g(j) \iff g(i)=\sum\limits_{j=0}^{i}-1^{i-j}{i\choose j}g(j) \]

    原理其实是凑 \(-1\) 的系数。

  • \[f(i)=\sum\limits_{j=i}^{n}{j\choose i}g(j) \iff g(i)=\sum\limits_{j=i}^{n}-1^{j-i}{j\choose i}g(j) \]

    这个可以看上一个式子,然后系数做矩阵的转置。

  • \[f(i)=\sum\limits_{j=i}^{n}{-1}^{j}{j\choose i}g(j) \iff g(i)=\sum\limits_{j=i}^{n}-1^{j}{j\choose i}g(j) \]

    \(-1\) 的系数捞回来,就又多了一种。

至此,二项式反演的基础就完备了。(大概……

让我们来看一道题目吧!

CF997C Sky Full of Stars

Problem:

  • 有一个 \(n \times n\) 的正方形网格,用三种颜色染色,求有多少种染色方案使得至少一行或一列是同一种颜色。

  • \(1 \le n \le 10^6\),结果对 \(998244353\) 取模。

Idea:

看见”至少“,考虑容斥。

感性认为方案数和二项式有关,而又有行列两种限制,大力高维二项式反演。

  • \(f(i,j)\) 为钦定有 \(i\)\(j\) 列是同一种颜色的方案数。
  • \(g(i,j)\) 为恰好有 \(i\)\(j\) 列是同一种颜色方案数。

钦定指只在意有我们选出这部分满足,其余不在意的情况。

此时的答案为:\(all-g(0,0)\)

直接算 \(g\) 是 hard 的,而 \(f\)\(g\) 的系数不明显,但是知道 \(g\) 却能很方便地算 \(f\)

那么直接用 \(g\)\(f\),并据此得到 \(f\)\(g\) 的系数:

\[f(i,j)=\sum\limits_{x=i}^{n}\sum\limits_{y=j}^{n}{x\choose i}{y\choose j}g(x,y) \iff g(i,j)=\sum\limits_{x=i}^{n}\sum\limits_{y=j}^{n}{-1}^{x+y-i-j}{x\choose i}{y\choose j}f(x,y) \]

接下来就是计算右边这一坨的问题,分两步:

1. 算 \(f(i,j)\)

分类讨论一下:

  1. \(i \ne 0,j\ne 0\)\(f(i,j)=3\times {n\choose i}{n\choose j} \times 3^{(n-i)(n-j)}\),即选出这部分,且均为某种颜色,其余部分任选。
  2. \(i \ne 0,j=0\)\(f(i,0)=3\times{n\choose i}\times3^{n(n-i)}\),这不用要求行和列的颜色相同,所有略有变化。
  3. \(i=0,j\ne 0\)\(f(0,j)=3\times{n\choose j}\times 3^{n(n-j)}\),同上。
  4. \(i=0,j=0\)\(f(0,0)=3^{n^2}\),最简单的一种。

发现都很好算,简单 \(\mathcal{O}(n)\) 预处理即可。

2. 算系数

这是重难点,直接暴力 \(\mathcal{O}(n^2)\) T 飞。

所以拆式子!

为了方便,这里把 \(i \ne 0,j \ne 0\) 的情况先带入:

\[\begin{eqnarray} g(0,0)&=& \sum\limits_{x=1}^{n}\sum\limits_{y=1}^{n}{-1}^{x+y-i-j}{x\choose 0}{y\choose 0}f(x,y) \\ &=& \sum\limits_{x=1}^{n}\sum\limits_{y=1}^{n}{-1}^{x+y}\times 3\times{n\choose x}{n\choose y}\times 3^{(n-x)(n-y)} \\ &=& 3^{n^2+1}\sum\limits_{x=1}^{n}\sum\limits_{y=1}^{n}{-1}^{x+y}{n\choose x}{n\choose y}\times 3^{-(x+y)n+xy} \\ &=& 3^{n^2+1}\sum\limits_{x=1}^{n}-1^x{n\choose x}\times 3^{-xn}\sum\limits_{y=1}^{n}{-1}^y{n\choose y}\times 3^{-yn+xy} \end{eqnarray} \]

现在变乱了一点,不过还是很简单,然而 \(3^{xy}\) 次方拆不掉……

不要慌张,我们只求 \(g(0,0)\),可以试着通过二项式定理(长得像)干掉内层循环。

\[\begin{eqnarray} \sum\limits_{y=1}^{n}{-1}^y{n\choose y}\times 3^{-yn+xy} &=& \sum\limits_{y=0}^{n}{-1}^y{n\choose y}\times 3^{y(x-n)}-1 \\ &=& \sum\limits_{y=0}^{n}{1}^{n-y}{n\choose y}\times {-3}^{y(x-n)}-1 \\ &=& (1-3^{x-n})^n-1 \end{eqnarray} \]

这个好了,我们再带入 \(i \ne 0,j = 0\) 的情况(其实也能直接算,不过拆下式子练练手),另一种同理(其实本质相同,因此值也相等):

\[\begin{eqnarray} g(0,0)&=& \sum\limits_{x=1}^n -1^x{x\choose 0}f(x,y) \\ &=& \sum\limits_{x=1}^n -1^x \times 3\times{n\choose x}\times 3^{n(n-i)} \\ &=& 3^{n^2}\sum\limits_{x=1}^n -1^x \times 3^{x-nx}{n\choose x} \\ &=& 3^{n^2}\sum\limits_{x=1}^n 1^{n-x} \times {-3}^{x(1-n)}{n\choose x} \\ &=& 3^{n^2}((1-3^{1-n})^n-1) \\ \end{eqnarray} \]

最后的直接算即可,复杂度 \(\mathcal{O}(n\log_2 n)\)

一点总结:

二项式反演之所以称为二项式反演,其不仅为系数为二项式系数,在推导式子的时候,也常常会用到二项式定理,即 \(\sum\limits_{i=0}^{n}a^ib^{n-i}{n\choose i}=(a+b)^n\)

有时候二项式系数是 \(\sum\limits_{i=k}^{n}{i\choose k}\) 的形式的时候,可以把下标平移到 \(0 \sim n-k\),得到形如 \(\sum\limits_{i=0}^{n-k}{i+k\choose k}\) 的式子,会变得较为方便。

又或者有时你发现系数长成 \(\sum\limits_{i=0}^{n}{-1}^i x^i{n\choose i}\) 的样子,不能直接上二项式定理,但如果左边是 \(1^i\) 就显然可以,那不妨把负号拿给 \(x\),变成 \({(-x)}^i\),这样就能套上了。

其实这点小技巧跟反演本身没什么关系,主要是推式子的能力。

我不说是哪个拉只因 qL 以前题解贺惯了,现在跑回来补这些。

posted @ 2023-08-12 20:13  LQ636721  阅读(75)  评论(0编辑  收藏  举报