zoukankan      html  css  js  c++  java
  • 二项式反演学习笔记

    这是一篇防遗忘的二项式反演证明博客
    在此不给出精妙的容斥证明,开始推代数证明
    众所周知二项式反演有两个形式
    (f(n) = sum_{i = 0}^{n} (-1)^{i}inom{n}{i}g(i) Leftrightarrow g(n) = sum_{i = 0}^{n} (-1)^{i} inom{n}{i}f(i))
    这个式子简直妙啊……太对称了
    然而它更常用的形式是这个
    (f(n) = sum_{i = 0}^{n}inom{n}{i}g(i) Leftrightarrow g(n) = sum_{i = 0}^{n} (-1)^{n - i} inom{n}{i} f(i))
    我们来证明一下
    证明反演的一般套路就是代入啦
    (f(n) = sum_{i = 0}^{n} (-1)^{i}inom{n}{i}g(i))
    (f(n) = sum_{i = 0}^{n} (-1)^{i}inom{n}{i}sum_{j = 0}^{i} (-1)^{j} inom{i}{j} f(j))
    我们考虑更换枚举顺序
    (f(n) = sum_{j = 0}^{n} sum_{i = j}^{n} (-1)^{i + j} inom{n}{i} inom{i}{j} f(j))
    如果只有j = n的时候,
    (sum_{j = 0}^{n} sum_{i = j}^{n} (-1)^{i + j} inom{n}{i} inom{i}{j})值为1的话,那么式子是成立的
    (虽然在别的情况下例如加加减减之后也是f(n)但是这个式子就是有这样特殊的性质)
    (inom{n}{i} inom{i}{j} = frac{n!}{i!(n - i)!}cdotfrac{i!}{j!(i - j)!} = frac{n!}{(n - j)!j!}cdotfrac{(n-j)!}{(n - i)![(n - i) - (n - j)]!} = inom{n}{j}inom{n - j}{n - i})
    (sum_{j = 0}^{n} sum_{i = j}^{n} (-1)^{2 * n - i - j} inom{n}{j}inom{n - j}{n - i})
    (sum_{j = 0}^{n} (-1)^{j} inom{n}{j}sum_{i = j}^{n} (-1)^{n - i}inom{n - j}{n - i})
    (sum_{j = 0}^{n} (-1)^{n - j} inom{n}{j}sum_{i = 0}^{n - j} (-1)^{i}inom{n - j}{i})
    显然在组合数之间相隔一个填一个不同的+-号,考虑杨辉三角,除了第一行,剩下的和全是0
    那么就有
    (sum_{j = 0}^{n} (-1)^{j} inom{n}{j}[n == j])
    只有当j = n的时候,值才是1,于是反演得证
    对于第二种形式呢,可以也推出一个类似的式子
    (f(n) = sum_{i = 0}^{n} (-1)^{i}inom{n}{i}sum_{j = 0}^{i} (-1)^{i - j} inom{i}{j} f(j))
    (sum_{j = 0}^{n} sum_{i = j}^{n} (-1)^{i - j} inom{n}{i} inom{i}{j})
    (sum_{j = 0}^{n} sum_{i = j}^{n} (-1)^{2 * n - i + j} inom{n}{j}inom{n - j}{n - i})
    (sum_{j = 0}^{n} (-1)^{n + j} inom{n}{j}sum_{i = j}^{n} (-1)^{n - i}inom{n - j}{n - i})
    (sum_{j = 0}^{n} (-1)^{n + j} inom{n}{j}[n == j])
    于是也可以得证

    然后你会发现,这个东西写成矩阵是个下三角,按理来说,这个东西会有一个上三角形式,例如莫比乌斯反演
    那么其实是有的
    (f(k) = sum_{i = k}^{n} (-1)^{i}inom{i}{k}g(i) Leftrightarrow g(k) = sum_{i = k}^{n} (-1)^{i} inom{i}{k}f(i))
    什么,也是那么对称的么
    还有一个常用形式
    (f(k) = sum_{i = k}^{n} inom{i}{k}g(i) Leftrightarrow g(k) = sum_{i = k}^{n} (-1)^{i - k} inom{i}{k}f(i))

    然后再去证明
    (f(k) = sum_{i = k}^{n} (-1)^{i}inom{i}{k}g(i))
    (f(k) = sum_{i = k}^{n} (-1)^{i}inom{i}{k} sum_{j = i}^{n} inom{j}{i} f(j))
    (f(k) = sum_{i = k}^{n} (-1)^{i}inom{i}{k} sum_{j = i}^{n} (-1)^{j} inom{j}{i} f(j))
    (f(k) = sum_{j = k}^{n} sum_{i = k}^{j} (-1)^{i + j}inom{i}{k} inom{j}{i} f(j))
    (inom{i}{k}inom{j}{i} = frac{i!}{k!(i - k)!}frac{j!}{i!(j - i)!} = frac{j!}{k!(j - k)!}frac{(j - k)!}{(i - k)![(j - k) - (i - k)]!} = inom{j}{k}inom{j - k}{i - k})
    (f(k) = sum_{j = k}^{n} sum_{i = k}^{j} (-1)^{i + j - 2*k}inom{j}{k}inom{j - k}{i - k})
    (f(k) = sum_{j = k}^{n} (-1)^{j - k}inom{j}{k}sum_{i = k}^{j} (-1)^{i - k}inom{j - k}{i - k})
    (f(k) = sum_{j = k}^{n} (-1)^{j - k}inom{j}{k}sum_{i = 0}^{j - k} (-1)^{i}inom{j - k}{i})
    (f(k) = sum_{j = k}^{n} (-1)^{j - k}inom{j}{k}[k == j])
    同理第二种形式也可以证明
    (f(k) = sum_{j = k}^{n} sum_{i = k}^{j} (-1)^{j - i}inom{i}{k} inom{j}{i} f(j))
    (f(k) = sum_{j = k}^{n} sum_{i = k}^{j} (-1)^{j - i - k + k}inom{j}{k}inom{j - k}{i - k} f(j))
    (f(k) = sum_{j = k}^{n} (-1)^{j - k}inom{j}{k}sum_{i = k}^{j} (-1)^{k - i} inom{j - k}{i - k} f(j))
    (f(k) = sum_{j = k}^{n} (-1)^{j - k}inom{j}{k}[j == k] f(j))

  • 相关阅读:
    python中将汉字转换成拼音
    关于拉格朗日和内维尔插值算法的python实现
    hdoj1874 (优先队列+Dijkstra)
    hdoj1325 Is It A Tree?
    poj2299 二分思想
    nyoj89 汉诺塔(二)
    nyoj914Yougth的最大化(二分搜索 + 贪心)
    nyoj832 合并游戏(状态压缩DP)
    zoj2432 hdoj1423 最长公共上升子序列(LCIS)
    poj1308 Is It A Tree?(并查集)详解
  • 原文地址:https://www.cnblogs.com/ivorysi/p/9058093.html
Copyright © 2011-2022 走看看