多项式专题

最近accoders天天出多项式科技题,我一道都不会,场场罚坐。气死我了, 我也要学科技。

杂项#

Lagrange 插值#

n 个点,我们试图确定一个 n1 次多项式。
设这 n 个点是 (xi,yi)
这个多项式就是:
f(x)=i=1nyiijxxjxixj
证明:

  • 这是一个 n1 次多项式。右侧只有 x 是变量,其余均为常数,共乘了 n1 次。
  • 这个函数中 n 个点与原函数重合。代入 x=xk ,我们发现只有 k=i 时候,连乘为 1, 其余情况为 0
  • 因此,我们证明了该多项式与原多项式相等。

    优化:连续整数取值。

    变换#

    FFT 快速傅里叶变换#

    NTT 快速数论变换#

    FWT 快速沃尔什变换 FMT 快速莫比乌斯变换#

    FWT/FMT 是处理子集卷积的利器。

    我们想要快速求出 Ci=i=jkAj×Bk

    其中 是 二元位运算的一种。 × 是普通乘法。

    以 OR 为例详细说明。其余的不给出详细说明。

    OR 卷积#

    我们想快速求出 Ci=i=j|kAj×Bk
    0
    类似FFT,我们想要构造出一个数列 FWT[...],使得这个数列能够快速通过 FWT[A] FWT[B] 得到 FWT[C]

    具体地 FWT[C]i=FWT[A]i×FWT[B]i

    网上题解告诉我们

    FWT[A]i=i=i|jaj 即可,子集卷积的名字就是这么来的

    证明利用乘法分配率和位运算结合律,与网上题解重复部分,略。

    如何快速求出:我们考虑高低位分类
    考虑A 最高位为 0 的部分 A0 与最高位为 1 的部分 A1 贡献。
    因为 A1 的子集不仅包括自己,还包括 A0 的对应部分,所以要加上指定部分。

    FWT[A]=merge(FWT[A0],FWT[A0]+FWT[A1])

    逆变换

    B0 表示变换后序列的低位 B1 表示变换后序列的高位,考虑用 B 得到 A

    B0=A0B1=A1+A0

    可以得到:

    UFWT[A]=merge(UFWTA0,UFWT[A1A0])

    AND 卷积#

    FWT[A]=merge(FWT[A0]+FWT[A1],FWT[A1])

    UFWT[A]=merge(UFWT[A0]UFWT[A1],UFWT[A1])

    XOR 卷积#

    f(i,j)popcount(i&j) 的奇偶性。
    FWT[A]=f(i,j)=0Ajf(i,j)=1Aj

    FWT[A]=merge(FWT[A0]+FWT[A1],FWT[A0]FWT[A1])

    如何理解: 最高位为 0 时候,最高位不影响 i & j,更不影响 f(i,j)
    最高位为 1 的时候,最高位影响 A1,使其交换正负号。

    UFWT[A]=merge(UFWT[A0]+UFWT[A1]2,UFWT[A0]+UFWT[A1]2)

    作者:cdsidi

    出处:https://www.cnblogs.com/cdsidi/p/16792842.html

    版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

    posted @   CDsidi  阅读(46)  评论(4编辑  收藏  举报
    相关博文:
    阅读排行:
    · 地球OL攻略 —— 某应届生求职总结
    · 周边上新:园子的第一款马克杯温暖上架
    · Open-Sora 2.0 重磅开源!
    · 提示词工程——AI应用必不可少的技术
    · .NET周刊【3月第1期 2025-03-02】
    点击右上角即可分享
    微信分享提示
    more_horiz
    keyboard_arrow_up light_mode palette
    选择主题
    menu