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

    定义集合幂级数:集合幂级数是一个形式幂级数,它的每一项的指数都是集合。

    它有几种乘法:子集卷积,xor卷积,and卷积,or卷积,其中前两者最有用。

    fwt的几条重要性质:它的直接定义式可以考虑变换的过程求出。它是线性变换(和的fwt=fwt的和)。fwt的逆变换要乘的矩阵就是原变换矩阵的逆矩阵。如果要乘法,则可以fwt后点乘。

    定义子集卷积:f[s|t]+=a[s]*b[t](s&t==0)

    这样子直接做是O(3^n)的

    但是可以使用占位多项式优化。

    设f[i][s],f[i][s]只有当i=bitcount(s)时为a[s],否则为0

    f[x+y][]+=a[x][]*b[y][]

    如果设s的1位数位x,t的为y

    则x+y=bitcount(s|t)等价于s&t=0

    所以可以对f[i][]作高维前缀和(原因后面再讲),再进行点乘。

    这样子时间复杂度是2^n*n^2的

    实际上,发现f[][j],每一个j在做完后是独立的,f[i][]构成了2^n个多项式。

    这带给了一些优美的性质。

    f[][j]的求逆可在2^n*n^2的时间复杂度内完成,对每个多项式求逆即可。

    定义幂级数的导数为$x^S=bitcount(s)x^{s-{t}}$ t为任意集合。

    发现这个导数的定义满足导数的性质。但是定义积分是困难的。

    只要作高维前缀和,就可以快速计算导数(就是占位多项式的前一位),同时推出集合幂级数求ln,exp的做法。

    化集合幂级数的方法和化简生成函数的方法有点像。通常有化为点乘,取系数,两端xor/or/and卷积几种方法。

    例题:

    ZJOI2019 开关

    at4996 agc034f

    uoj94

    noio r3 优秀子序列

  • 相关阅读:
    模块之使用模块
    函数之return
    Python3入门(八)——面向对象OOP
    Python3入门(七)——模块
    Python3入门(六)——函数式编程
    Python3入门(五)——高级特性
    Python3入门(四)——Python函数
    Python3入门(三)——Python基础语法
    Python3入门(二)——Python开发工具Pycharm安装与配置
    大数据入门第二十五天——elasticsearch入门
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/12886248.html
Copyright © 2011-2022 走看看