在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

看完學會速傅立葉變換FFT

jf_78858299 ? 來源:ACM算法日常 ? 作者: Xiejiadong ? 2023-05-05 09:48 ? 次閱讀

FFT 即快速傅立葉變換。在很多計算機領域都用用處,例如數(shù)字圖像處理、計算機網絡。但他在算法競賽中主要是用于多項式和生成函數(shù)相關的題目。

多項式

表達方式

簡介

  • 系數(shù)表達式,即。
  • 坐標形式。每一個坐標用表示。顯然,為了能夠表示一個確定的多項式,需要個不同的坐標來表示。

比較

  • 對于系數(shù)表示,多項式加法的時間復雜度是,多項式乘法的時間復雜度是。
  • 對于點值表示,多項式加法的時間復雜度同樣是,但是乘法的時間復雜度就是(因為多項式乘法以后最高項次數(shù)為,我們只需要個坐標表示)。

思考

這樣一來,我們就有一個想法,多項式乘法,是不是可以利用坐標表示做多項式乘法特別快這點來優(yōu)化算法。

于是需要解決的最大的問題就是,多項式兩種表示方法之間的互相轉換。

求值樸素做法的時間復雜度是,即隨便選取一個值帶入,暴力計算。

差值樸素的做法時間復雜度是,即根據(jù)坐標進行高斯消元。

在介紹 FFT 之前,得先學習 DFT (離散傅里葉變換)算法。

DFT

由于對一個多項式的點值表達式的取是任意的,所以好的取法可能會使一個算法產生本質性的蛻變。

我們選取次單位復根作為來取值。

單位復根

,這個方程的復數(shù)根為次單位根。

單位的個單位根分別為。

個單位根在復平面的坐標表示為,我們將這個記為。在復平面上形象的表示的話,就是下圖:

圖片

單位根在多項式的應用

我們將個單位根帶入多項式可以得到個因變量結果,記為。

我們將個單位根的倒數(shù)作為自變量帶入由作為系數(shù)的多項式,可以得到。

而當?shù)臅r候,它為,其余時候,它為(通過等比數(shù)列求和)。于是有。

于是可以發(fā)現(xiàn),將個單位根的倒數(shù)帶入變換后的多項式,可以得到原來的多項式。

這樣一來,我們利用個單位根的性質,完成了多項式兩種表示方式之間的轉換。

DFT算法

有了的取值,我們就可以得到的取值了。

。

直接暴力計算,兩個方向轉換的時間復雜均為。

FFT

那么 FFT 算法是如何優(yōu)化計算這一過程的?利用分治。

我們把一個多項式的計算分為偶數(shù)項的計算和奇數(shù)項的計算:

也就是說, FFT 的思想就是不斷得把一個多項式拆分成奇數(shù)多項式和偶數(shù)多項式,然后合并兩個多項式的信息

也就是說,如果我們已經得到了和,我們只需要就可以得到了。

每次都能把多項式的長度減小一半,于是時間復雜度就是。

模版

C++ 是自帶了復數(shù) stl 的,即:

#include

但是常數(shù)大,跑得慢,不如自己重載的好。

  • 下面的模版必須要保證是的整數(shù)次冪。
typedef double LD;
const LD PI = acos(-1);
struct C {
    LD r, i;
    C(LD r = 0, LD i = 0): r(r), i(i) {}
};
C operator + (const C& a, const C& b) {
    return C(a.r + b.r, a.i + b.i);
}
C operator - (const C& a, const C& b) {
    return C(a.r - b.r, a.i - b.i);
}
C operator * (const C& a, const C& b) {
    return C(a.r * b.r - a.i * b.i, a.r * b.i + a.i * b.r);
}

void FFT(C x[], int n, int p) {
    for (int i = 0, t = 0; i < n; ++i) {
        if (i > t) swap(x[i], x[t]);
        for (int j = n >> 1; (t ^= j) < j; j >>= 1);
    }
    for (int h = 2; h <= n; h <<= 1) {
        C wn(cos(p * 2 * PI / h), sin(p * 2 * PI / h));
        for (int i = 0; i < n; i += h) {
            C w(1, 0), u;
            for (int j = i, k = h >> 1; j < i + k; ++j) {
                u = x[j + k] * w;
                x[j + k] = x[j] - u;
                x[j] = x[j] + u;
                w = w * wn;
            }
        }
    }
    if (p == -1)
        FOR (i, 0, n)
            x[i].r /= n;
}

void conv(C a[], C b[], int n) {
    FFT(a, n, 1);
    FFT(b, n, 1);
    FOR (i, 0, n)
        a[i] = a[i] * b[i];
    FFT(a, n, -1);
}

例題

A * B II

https://acm.ecnu.edu.cn/problem/3007/

大整數(shù)相乘。

把每一位都看成是多項式其中一項的系數(shù),那么大數(shù)最后的結果也就是多項式乘法系數(shù)的結果。

要進位處理。

Hnoi2017 禮物

顯然是要計算的最小值,其中$0≤x

展開這個式子,

除了,其他的和與相關的項都可以在的時間內算出了

那么配個方,就可以求出最小值了,而是固定的

現(xiàn)在的問題就是求,我們可以用FFT來解決

如果我們把多項式倒置,我們就能發(fā)現(xiàn)式子的和的下標和可以相同,我們可以利用多項式乘法同時算出卷積。

設,那么,這樣就可以用FFT算出來了

總的時間復雜度

#include
#define inf 0x3fffffff
using namespace std;

typedef double LD;
const LD PI=acos(-1);
struct C
{
    LD r,i;
    C(LD r=0,LD i=0):r(r),i(i){}
};
C operator + (const C& a, const C& b){
    return C(a.r+b.r,a.i+b.i);
}
C operator - (const C& a, const C& b){
    return C(a.r-b.r,a.i-b.i);
}
C operator * (const C& a, const C& b){
    return C(a.r*b.r-a.i*b.i,a.r*b.i+a.i*b.r);
}
 
void FFT(C x[],int n,int p)
{
    for (int i=0,t=0;i
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 圖像處理
    +關注

    關注

    27

    文章

    1296

    瀏覽量

    56819
  • FFT
    FFT
    +關注

    關注

    15

    文章

    437

    瀏覽量

    59448
  • 計算機網絡
    +關注

    關注

    3

    文章

    341

    瀏覽量

    22200
  • 傅立葉變換
    +關注

    關注

    3

    文章

    105

    瀏覽量

    32429
收藏 人收藏

    評論

    相關推薦

    快速傅立葉變換(FFT)算法實驗

    本帖最后由 mr.pengyongche 于 2013-4-30 02:23 編輯 快速傅立葉變換(FFT)算法實驗一、摘
    發(fā)表于 12-21 10:54

    如何使用快速傅立葉變換FFT)的8590 C/E/L系列頻譜分析儀中的FFT函數(shù)?

    本產品說明說明了如何使用快速傅立葉變換FFT)的8590 C/E/L系列頻譜分析儀中的FFT函數(shù)。FFT通過提供智能用戶界面簡化了AM分析
    發(fā)表于 04-04 16:50

    淺懂示波器FFT快速傅立葉變換功能及運用

    大多數(shù)示波器上都有個FFT功能,也叫快速傅立葉變換,但很多人不了解這個功能是做什么用的,百度以后又會遇到各種各樣的高數(shù)公式,看的一頭霧水,遂而放棄這塊知識。我們來看百度百科的解釋:FFT
    發(fā)表于 01-14 17:00

    示波器FFT快速傅立葉變換不會用?看完這篇帖子,我徹底悟了

    大多數(shù)示波器上都有個FFT功能,也叫快速傅立葉變換,但很多人不了解這個功能是做什么用的,百度以后又會遇到滿屏的高數(shù)公式,看得一頭霧水,繼而以放棄告終。先來看看百度百科對FFT的解釋:
    發(fā)表于 09-22 13:42

    快速傅立葉變換開發(fā)指南

    快速傅立葉變換開發(fā)指南:The Xilinx® LogiCORE™ IP Fast Fourier Transform (FFT) is a computationally
    發(fā)表于 12-31 15:19 ?35次下載

    快速傅立葉變換FFT)的Nios II實現(xiàn)

    快速傅立葉變換FFT)的Nios II實現(xiàn) 隨著數(shù)字電子技術的發(fā)展,數(shù)字信號處理的理論和技術廣泛地應用于通訊、語音處理、計算機和多媒體等領域。快速傅里葉
    發(fā)表于 02-09 09:38 ?81次下載

    基于FPGA的快速傅立葉變換

    摘要:在對FFT(快速傅立葉變換)算法進行研究的基礎上,描述了用FPGA實現(xiàn)FFT的方法,并對其中的整體結構、蝶形單元及性能等進行了分析。
    發(fā)表于 06-20 14:13 ?1115次閱讀

    1024點FFT快速傅立葉變換

    Xilinx FPGA工程例子源碼:1024點FFT快速傅立葉變換
    發(fā)表于 06-07 14:13 ?33次下載

    Xilinx 的IP:1024點FFT快速傅立葉變換

    Xilinx FPGA工程例子源碼:Xilinx 的IP:1024點FFT快速傅立葉變換
    發(fā)表于 06-07 15:07 ?51次下載

    DSP進行浮點快速傅立葉變換剖析

    前言本文目的是演示如何使用STM32F30x 內部的DSP 進行浮點快速傅立葉變換FFT),為聯(lián)系實際應用
    的頭像 發(fā)表于 09-18 06:44 ?9547次閱讀

    簡述FPGA的快速傅立葉變換

    摘要:在對FFT(快速傅立葉變換)算法進行研究的基礎上,描述了用FPGA實現(xiàn)FFT的方法,并對其中的整體結構、蝶形單元及性能等進行了分析。 傅立葉
    的頭像 發(fā)表于 05-27 11:21 ?2264次閱讀
    簡述FPGA的快速<b class='flag-5'>傅立葉</b><b class='flag-5'>變換</b>

    傅立葉變換是怎么變換傅立葉的理解

    關于傅立葉變換,無論是書本還是在網上可以很容易找到關于傅立葉變換的描述,但是大都讓人很難理解太過抽象,盡是一些讓人看了就望而生畏的公式的羅列。 要理解
    的頭像 發(fā)表于 08-25 11:25 ?4937次閱讀

    我印象中的快速傅里葉變換 (FFT)

    首先,FFT是離散傅立葉變換 (DFT) 的快速算法,那么說到FFT,我們自然要先講清楚傅立葉變換
    的頭像 發(fā)表于 05-05 09:57 ?1198次閱讀
    我印象中的快速傅里葉<b class='flag-5'>變換</b> (<b class='flag-5'>FFT</b>)

    淺懂示波器FFT快速傅立葉變換功能及運用

    大多數(shù)示波器上都有個FFT功能,也叫快速傅立葉變換,但很多人不了解這個功能是做什么用的,百度以后又會遇到各種各樣的高數(shù)公式,看的一頭霧水,遂而放棄這塊知識。我們來看百度百科的解釋:FFT
    的頭像 發(fā)表于 11-08 15:01 ?6934次閱讀
    淺懂示波器<b class='flag-5'>FFT</b>快速<b class='flag-5'>傅立葉</b><b class='flag-5'>變換</b>功能及運用

    如何使用SBench 6對數(shù)字化儀采集信號進行處理?(三)——快速傅立葉變換FFT

    上一篇文章介紹了德思特SBench 6的平均運算功能。本章將繼續(xù)為大家介紹SBench 6的快速傅立葉變換FFT)。
    的頭像 發(fā)表于 01-23 10:38 ?615次閱讀
    如何使用SBench 6對數(shù)字化儀采集信號進行處理?(三)——快速<b class='flag-5'>傅立葉</b><b class='flag-5'>變換</b>(<b class='flag-5'>FFT</b>)
    主站蜘蛛池模板: 黄色网在线| 男人日女人的网站| 在线观看s色| 黄网站在线观看永久免费| 国产亚洲精品aa在线观看| aaaaaa级特色特黄的毛片| www.999精品视频观看免费| 亚洲视频精选| 扒开双腿爽爽爽视频www| 欧美色p| 欧美福利网| 精品四虎免费观看国产高清| 国产精品高清一区二区三区不卡| 男人边吃奶边做视频免费网站| 欧美一级色视频| 色多多在线看| 欧美色视频日本| 国产片一区二区三区| 一级高清| 天天爽夜夜爽夜夜爽| 亚洲精品久久久久久久蜜桃| 天天摸天天澡天天碰天天弄| 婷婷综合网站| 狠狠操亚洲| 2023天天操| 午夜欧美性视频在线播放| 在线另类| 亚洲国产精品第一页| 亚洲天堂资源网| 亚洲成在人线久久综合| 日本.www| 久久香蕉国产线看观看精品yw| 国产成人久视频免费| 日本综合视频| 高清不卡毛片免费观看| 亚洲一区免费| 日本一区视频在线观看| 久久99热国产这有精品| 她也啪97在线视频| 韩国三级在线不卡播放| 2018天天拍拍拍免费视频|