zoukankan      html  css  js  c++  java
  • 集合幂级数

    首先集合并卷积和集合异或卷积就是$FWT$。

    论文里好像就是用反演解释了一下$FWT$。

    对于一个集合幂级数$f$,定义它的莫比乌斯变换为$widehat f$

    $widehat f_S=sum_{T in S}f_T$

    反演(容斥可以很简单的证明)一下就变成了

    $f_S=sum_{T in S}(-1)^{(|S|-|T|)} widehat f_T$

    $widehat h_S=sum_{L in S, Rin S}f_Lg_R=(sum_{L in S}f_L) (sum_{R in S}g_R)=widehat f_S widehat g_S$

    所以可以先求出$widehat f$和$ widehat g$,然后对应项相乘求出$widehat h$,再反演出$h$。

    感觉集合对称差卷积解释的不太好。

    子集卷积

    $h_s=sum_{L in S,R in S}[Lcup R =S][Lcap R =emptyset]f_Lg_R$

    因为$[Lcup R =S][Lcap R =emptyset]$可以写成$[Lcup R =S][|L|+|R|=|S|]$,我们可以用再增加一维表示集合大小。

    $sigma _{i,S}=[i=|S|]f_s$

    我们求出$f$和$g$的集合占位幂级数$ sigma$和$ au$,求出$ heta$,其中

    $ heta_{i,S} = sum_{j+k=i,L cup R =S} sigma_{j,L} imes au_{k,R}$

    因为当$i=|S|,sigma_{j,L} imes au_{k,R} eq 0$时也必定满足$j=|L|,k=|R|$,就相当于子集卷积变成了集合与卷积了。

    最开始感觉复杂度是$n^32^n$,因为集合幂级数乘法是$n2^n$,形式幂级数乘法是$n^2$。

    然而发现再把$sigma$和$ au$反演后直接做一次乘法是$2^n$的,做多次乘法时并不需要每次都反演一遍,不影响总复杂度,所以复杂度是$n^22^n$。

     

  • 相关阅读:
    .net 日期格式化
    grunt 上手
    设计模式的认识
    顺时针打印矩阵
    WCF 框架运行时类图
    Python闭包详解
    软件用了那些技术
    zoj 1610 Count the Colors(线段树延迟更新)
    快速提高自己的技术的办法?有两个方法
    纯win32实现PNG图片透明窗体
  • 原文地址:https://www.cnblogs.com/ezyzy/p/8612123.html
Copyright © 2011-2022 走看看