zoukankan      html  css  js  c++  java
  • 二项式反演笔记(草稿)

    一般形式

    \[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\) 函数更好求得。

  • 相关阅读:
    IntelliJ IDEA注册码
    linux中patch命令 -p 选项
    设备文件简介
    《算法导论》——矩阵
    《算法导论》——数论
    linux常用查看硬件设备信息命令(转载)
    netstat和telnet命令在Windows7中的用法(转载)
    c++容器使用总结(转载)
    离散数学——数论算法
    c语言中内存对齐问题
  • 原文地址:https://www.cnblogs.com/Azazel/p/15641130.html
Copyright © 2011-2022 走看看