• 二项式反演笔记(草稿)


    一般形式

    \[f(n)=\sum_{k=0}^n \begin{pmatrix}n\\k \end{pmatrix}g(k)\\ \Rightarrow g(n)=\sum_{k=0}^n(-1)^{n-k}\begin{pmatrix}n\\k \end{pmatrix}f(k) \]

    \(~~~~\) 可以认为是至多与恰好的特殊形式。

    至多与恰好

    \[f(n)=\sum_{i=m}^n \begin{pmatrix} n\\i \end{pmatrix} g(i)\\ \Rightarrow g(n)=\sum_{i=m}^n (-1)^{n-i} \begin{pmatrix} n\\i \end{pmatrix} f(i) \]

    应用:\(f\) 记为至多的方案数,\(g\) 记为恰好的方案数。

    \(E.g:\)\(n\) 个球排成一行,有 \(k\) 种颜色,要求给每个球染色使得每种颜色至少出现一次且相邻两个球颜色不同。

    \(~~~~\) 记:\(f_i\) 为至多使用 \(i\) 种颜色对 \(n\) 个球染色的方案数,且相邻的球颜色不同的方案数,即 \(f_i=i\times(i-1)^{n-1}\). \(g_i\) 为恰好使用 \(i\) 种颜色对 \(n\) 个球染色的方案数

    \(~~~~\) 可以写出以下柿子:

    \[f_k=\sum_{i=0}^k \begin{pmatrix} k\\i \end{pmatrix} g_i \]

    \(~~~~\) 反演得到:

    \[g_k=\sum_{i=0}^k (-1)^{k-i} \begin{pmatrix} k\\i \end{pmatrix} f_i \]

    \(~~~~\) 显然可以 \(\mathcal{O(k)}\) 求出所有 \(g\) ,最终答案就是 \(\sum_{i=1}^k g_i\)

    至少与恰好

    \[f(n)=\sum_{i=n}^m \begin{pmatrix} i\\n \end{pmatrix} g(i)\\ \Rightarrow g(n)=\sum_{i=n}^m (-1)^{i-n}\begin{pmatrix} i\\n \end{pmatrix} f(i) \]

    应用:\(f\) 记为至少的方案数,\(g\) 记为恰好的方案数。

    \(E.g:\)\(n\) 个元素的集合,它共有 \(2^n\) 个子集,问有多少种选择若干个子集的方法使得这些选择的子集的交集的大小为 \(k\)

    \(~~~~\) 记:\(f\) 为交集大小至少为 \(k\) 的方案数,则所有选择的集合必须包含所钦定的 \(k\) 个元素,这样的集合应有 \(2^{n-k}\) 个,同时再从这些集合里面选择非空子集,共 \(2^{2^{n-k}}-1\) 种方案数。然后再考虑钦定的方案数,\(f_k=(2^{2^{n-k}}-1)\times C_n^k\)

    其实选择至多和至少主要是看哪个的 \(f\) 函数更好求得。

  • 相关阅读:
    java 求两个数最大值
    java 加法运算
    javs switch 语句
    git合并分支成功,但是push失败(remote: GitLab: You are not allowed to push code to protected branches on this project.)
    python 获取日期以及时间
    1713
    linux shell脚本中的延时
    java 类的继承
    Python3 使用企业微信 API 发送消息
    java if 条件语句
  • 原文地址:https://www.cnblogs.com/Azazel/p/15641130.html
Copyright © 2020-2023  润新知