• acm 快速傅里叶变换的理解


    A(x)=A4[0](x*x)+x*A4[1](x*x);
    x=1,w,w*w,w*w*w
    wi means w^i
    n=4;w=w[4]
    result shuould be
    y[0]=A4[0](1*1)+1*A4[1](1*1);
    y[1]=A4[0](w*w)+w*A4[1](w*w);
    y[2]=A4[0](w2*w2)+w2*A4[1](w2*w2);
    y[3]=A4[0](w3*w3)+w3*A4[1](w3*w3);
    1*1=w2*w2=(-1*-1) w2=w0*-1=-1;
    w*w=w[2];w3*w3=w(6%4)=w*w=w[2]
    w2=-1
    w3=-w w3=w(1+4/2);
    pro perform
    =============
    w[n] means e^(2πi/n)
    w[4]*w[4]=w[2]
    n=2, w=w[2]
    A4[0](1),A4[0](w[2])
    A[0]=A2[0]+A2[1]
    A[1]=A2[0]-A2[1]
    ----
    A4[1](1),A4[1](w[2])
    A[2]=A2[2]+A2[3]//0,1
    A[3]=A2[2]-A2[3]
    ==============
    n=4;w=w[4]
    //两边各取一半就能取到x^2,右边乘上本轮应该有的wk,这样就合理了
    y[0]=A4[0](1)+1*A4[1](1)
    y[2]=A4[0](1)-1*A4[1](1)
    y[1]=A4[0](w[2])+w*A4[1](w[2])
    y[3]=A4[0](w[2])-wA4[1](w[2])
    ===============
    0,1,2,3
    0,2,1,3
    y[0]=a[0]+w[2]0*a[2];
    y[1]=a[0]+w[2]1*a[2];
    y[2]=a[1]+w[2]0*a[3];
    y[3]=a[1]+w[2]1*a[3];
    ===============
    y[0]=a[0]+w[2]0*a[2]+w[4]0*a[1]+w[4]0*w[2]0*a[3];
    y[2]=a[0]+w[2]0*a[2]+w[4]2*a[1]+w[4]2*w[2]0*a[3];
    w[4]2=-w[4]0
    y[1]=a[0]+w[2]1*a[2]+w[4]1*a[1]+w[4]1*w[2]1*a[3];
    y[3]=a[0]+w[2]1*a[2]+w[4]3*a[1]+w[4]3*w[2]1*a[3];
    w[4]3=-w[4]1
    ===============
    y[2]=a[0]+(w[4]2*w[4]2=w[4]4=1=w[2]0)a[2]+(w[4]2=-w[4]0=-1)....
    y[3]=a[0]+(w[2]1=w[4]6=w[4]2=w[2]1)a[2]+(w[4]3=-w[4]1,)....(w[4]3*w[2]1=w[4]5=w[4](5+4)=w[4]9)*a[3];
    ===============
    所以分析一下n=8的情况
    首先分成n1=4,n2=4
    此时分别递归出两层,
    在回溯的时候,y0,y1,y2,y3的意义就是n=4时取的四个特征值的y
    n1=4有可以分成n3=2,n4=2两层
    每一段的,y0,y1的意义就是n=2时取的两个特征值的y
    那么n=2时有四段这样的
    其中每两段,左边一段就代表了A4[0],右边一段就代表了A4[1],这样就能合成A8[0],右边的A8[1]同理
    那么其实,根据公式yk+4/2也就递推出来了(n=4时),所以连续处理的一段的左一半因为在之前的处理中
    就是按照wn升幂的,所以现在直接拿出来,那么他的值就是A8[0](w^0*2),A8[0](w^1*2),A8[0](w^2*2),A8[0](w^3*2)
    右边和左边当然是对称的,然后连续一整段的
    什么事连续一整段呢,我解释下
    像(0,1)(2,3)(4,5)(6,7)
    这四段是不连续的,他们的意义都一样,w^0,w^1的取值
    而(0,1,2,3,4,5,6,7),
    取出的四段则是连续的,(0,4)(1,5)(2,6)(3,7)
    所以每一段的旋转系数W,都要按照Wn,每次幂次加一,这样才能对的上yk=A0[(x^k)^2]+x^k*A1[(x^k)^2]
    中右边的系数,n=8,最后一次回溯计算则有连续4对,k=0,1,2,3

    还有一个需要注意的地方是
    W8=e^(2pi*i)/8

    W2=e^(2pi*i)/2 =W8*W8*W8*W8
    除的数越小,则Wn的次数越高,而不是越低

  • 相关阅读:
    Java59道常见面试题,内附答案
    2020年一个月时间面试字节跳动,面试经历分享(已拿offer)
    阿里总结的《Java成神之路》 PDF 火了,完整版开放下载!
    Github14k堪称神级的Spring Boot手册,从基础入门到实战进阶
    三面阿里(支付宝)Java高开岗,复习两月有幸拿到offer
    Java 最常见的 200+ 面试题:面试必备
    【面试总结】终于拿到了美团offer了,没有辜负了这三个月的努力啊
    阿里P9都赞不绝口的面试宝典!半月看完25大专题,居然斩获阿里P7offer
    Integer是int
    抽象类和接口
  • 原文地址:https://www.cnblogs.com/linkzijun/p/6782206.html
Copyright © 2020-2023  润新知