zoukankan      html  css  js  c++  java
  • FFT卷积相加模板

    struct Complex
    {
        double r,i;
        Complex(double _r,double _i):r(_r),i(_i){}
        Complex(){}
        Complex operator +(const Complex &b)
        {
            return Complex(r+b.r,i+b.i);
        }
        Complex operator -(const Complex &b)
        {
            return Complex(r-b.r,i-b.i);
        }
        Complex operator *(const Complex &b)
        {
            return Complex(r*b.r-i*b.i,r*b.i+i*b.r);
        }
    };
    void change(Complex y[],int len)
    {
        int i,j,k;
        for(i = 1, j = len/2;i < len-1;i++)
        {
            if(i < j)swap(y[i],y[j]);
            k = len/2;
            while( j >= k)
            {
                j -= k;
                k /= 2;
            }
            if(j < k)j += k;
        }
    }
    void fft(Complex y[],int len,int on)
    {
        change(y,len);
        for(int h = 2;h <= len;h <<= 1)
        {
            Complex wn(cos(-on*2*pi/h),sin(-on*2*pi/h));
            for(int j = 0;j < len;j += h)
            {
                Complex w(1,0);
                for(int k = j;k < j+h/2;k++)
                {
                    Complex u = y[k];
                    Complex t = w*y[k+h/2];
                    y[k] = u+t;
                    y[k+h/2] = u-t;
                    w = w*wn;
                }
            }
        }
        if(on == -1)
            for(int i = 0;i < len;i++)
                y[i].r /= len;
    }
  • 相关阅读:
    linux安装源码包报错
    中间文件
    c指针复习
    gcc常用编译选项
    第008课_第1个ARM裸板程序及引申
    开发板熟悉与体验
    裸机开发步骤笔记
    linux进阶命令2
    linux进阶命令1
    vi编辑器的使用
  • 原文地址:https://www.cnblogs.com/dyzll/p/6057758.html
Copyright © 2011-2022 走看看