• 任意长度循环卷积&单位根反演 学习笔记


    今天听 myee" role="presentation" style="position: relative;">myee 嘴的,赶紧来补个学习笔记。

    PS:FFT 本质是长度为 2k" role="presentation" style="position: relative;">2k 的循环卷积。

    单位根反演

    反演本质:

    1ni=0n1ωnai=[n|a]" role="presentation" style="text-align: center; position: relative;">1ni=0n1ωnai=[n|a]

    证明:

    • 如果 n|i" role="presentation" style="position: relative;">n|i,那么显然可以将 a" role="presentation" style="position: relative;">a 拆为若干个 ωnn" role="presentation" style="position: relative;">ωnn,之后式子只剩下了 n" role="presentation" style="position: relative;">nωnn" role="presentation" style="position: relative;">ωnn,那么乘上 1n" role="presentation" style="position: relative;">1n 就是 1" role="presentation" style="position: relative;">1 啦。
    • 如果 n|a" role="presentation" style="position: relative;">n|a,容易发现 ωni" role="presentation" style="position: relative;">ωni 还是能够互相抵消,那么等于 0" role="presentation" style="position: relative;">0

    形式:

    gk=i=0n1fiωnikfk=1ni=0n1giωnik" role="presentation" style="text-align: center; position: relative;">gk=i=0n1fiωnikfk=1ni=0n1giωnik

    循环卷积

    定义 k" role="presentation" style="position: relative;">k 阶循环卷积为:

    hk=i+jk(modn)fi×gj" role="presentation" style="text-align: center; position: relative;">hk=i+jk(modn)fi×gj

    可以写出二阶循环卷积(不就是异或吗)的转移矩阵:

    fwt=[1111]ifwt=[1111]" role="presentation" style="text-align: center; position: relative;">fwt=[1111]ifwt=[1111]

    k" role="presentation" style="position: relative;">k 阶的转移矩阵是这样的:

    fwt=[ωk0ωk0ωk0ωk0ωk0ωk1ωk2ωkk1ωk0ωk2ωk4ωk2k2ωk0ωkk1ωk2k1ωkk22k+1]ifwt=[ωk0ωk0ωk0ωk0ωk0ωk1ωk2ωkk+1ωk0ωk2ωk4ωk2k+2ωk0ωkk+1ωk2k+1ωkk2+2k1]" role="presentation" style="position: relative;">fwt=[ωk0ωk0ωk0ωk0ωk0ωk1ωk2ωkk1ωk0ωk2ωk4ωk2k2ωk0ωkk1ωk2k1ωkk22k+1]ifwt=[ωk0ωk0ωk0ωk0ωk0ωk1ωk2ωkk+1ωk0ωk2ωk4ωk2k+2ωk0ωkk+1ωk2k+1ωkk2+2k1]

    这样可以 O(k2)" role="presentation" style="position: relative;">O(k2) 地完成 fwt 变换(但板题 任意模数 Chirp Z-Transform 需要用 FFT 优化加速),O(k)" role="presentation" style="position: relative;">O(k) 地点乘。

    PS:如果需要将对应系数相加,可以在 fwt 后直接相加减,因为这是个线性变换。

    咕咕咕

    P4191 [CTSC2010]性能优化

  • 相关阅读:
    C++ 命名空间
    RHCE第三天笔记
    day-43 代码随想录算法训练营(19) 动态规划 part 05
    c语言---指针
    词嵌入数据集的预处理--Word2Vec实现(一)
    JAVA基于微信小程序的校园信息共享平台毕业设计-附源码211615
    入侵检测模型(An Intrusion-Detection Model)
    MySQL JDBC编程
    PAE-PEG-HSA 聚(β-氨基酯)-聚乙二醇-人血清白蛋白,BSA/OVA修饰聚(β-氨基酯)
    LeetCode_多源 BFS_中等_2258.逃离火灾
  • 原文地址:https://blog.csdn.net/qq_53299575/article/details/126202920