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


    今天听 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]性能优化

  • 相关阅读:
    快排+归并非递归实现
    【Python编程】二、基本语法
    PMSM——转子位置估算基于QPLL
    ActiveReportsJS 3.1 VS ActiveReportsJS 3.0
    【JavaScript 算法】二分查找:快速定位目标元素
    四种质数筛选算法总结(c++)
    (学习日记)2022.8.11
    CMakeLists.txt上OpenCV库配置
    【力扣】27. 移除元素
    MySQL主从同步,出现Slave_SQL_Running:no和slave_io_running:no问题的解决方法
  • 原文地址:https://blog.csdn.net/qq_53299575/article/details/126202920