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))

  • 相关阅读:
    FtpClient中文乱码问题解决
    JS点击按钮弹出窗口
    win7配置简单的FTP服务器
    docker 使用案例:部署nginx
    Asp.Net Boilerplate Project (ABP) 视频教程
    dva.js 用法总结
    webpack4: compilation.mainTemplate.applyPluginsWaterfall is not a function 解决方法
    c# MongoDB Driver 官方教程翻译
    c# redis 操作类库推荐:StackExchange.Redis.Extensions
    react-native导航器 react navigation 介绍
  • 原文地址:https://www.cnblogs.com/ivorysi/p/9058093.html
Copyright © 2011-2022 走看看