zoukankan      html  css  js  c++  java
  • 「快速莫比乌斯变换(FMT)与快速莫比乌斯反演(FMI)」

    博主的 BiBi 时间

    这应该是本蒟蒻的第一篇学习笔记吧。

    定义与结论

    FMT

    定义

    [f(S)=sum_{S'in S}g(S') ]

    FMI

    则有

    [g(S)=sum_{S'in S}(-1)^{|S|-|S'|}*f(S') ]

    证明

    不妨设集合 (x,y,z)(x,y,z) 集合各自大小为 (a,b,c)(这里的集合大小是二进制下一的个数)。

    我们知道,若将后面的结论带入前面的式子之后等式成立,那么这个结论是正确的。

    [sum_{yin x} g(y)=sum_{yin x} sum_{zin y} (-1)^{b-c}*f(z) ]

    仔细观察这个式子,我们发现 (x) 是固定的,我们转而考虑每一个 (z) 的情况(因为后面式子只和 (y) 的大小有关)。

    对于每个 (z),应该有 (C(a-c,b-c)) 种方案((b) 就是枚举 (y) 的大小,(C(a-c,b-c)) 就是 (b) 大小的 (y) 的可能情况)。

    令(这个设置其实是为了防止后文误解)

    [t=sum_{yin x} g(y) ]

    那么就有:

    [t=sum_{zin x} f(z)*sum_{b=c}^{a}C(a-c,b-c)*(-1)^{b-c} ]

    式子可以改写为:

    [t=sum_{zin x} f(z)*sum_{b=c}^{a}C(a-c,b-c)*(-1)^{b-c}*1^{a-b} ]

    二项式定理得:

    [t=sum_{zin x} f(z)*0^{a-c} ]

    显然只有当 (a=c) 时才会取到 (f(z)) 的值,又因为 (zin x),所以此时 (x=z),那么得出 (t=f(x))

    所以结论成立。

    另外记录一个有趣的小证明(这个证不了全部)。其实结论就是当 (a-c) 为奇数时,后面那一坨 (f(z)) 的系数为 (0)

    首先有 (C(a-c,b-c)=C(a-c,a-c-(b-c))=C(a-c,a-b))

    你可以把 (b) 看作在区间 ([c,a]) 中游走的点,当 (d(a,b)=d(b,c)) 时,(C) 值相等(这不是废话)。然而此时 (-1) 的指数的奇偶性明显不同。(实在不行可以看图)

    c b     b' a
    1 2 3 4 5  6
    

    代码实现

    相信自己,我先咕为敬
    
  • 相关阅读:
    linux下SVN迁移
    hive-site.xml
    5.扩展 GROUP BY
    4.锁——避免重复启动同一程序
    1.执行计划探究(一)
    1.日期_星期
    3.放弃CHAR吧,在铸成大错之前!
    2.NULL 的问题
    1.ORACLE 尽量不使用隐式转换
    webservice
  • 原文地址:https://www.cnblogs.com/AWhiteWall/p/13121993.html
Copyright © 2011-2022 走看看