FFT詳解,通俗易懂便於自己理解

2021-09-28 11:09:11 字數 1959 閱讀 4268

演算法課最近講到了遞迴分治的策略,留下了第乙個有技術含量的作業:簡化多項式計算的fft演算法,於是我打算在這裡結合前人的分析解析一下這一演算法。

fft即fast fourier transform,是快速傅利葉變換的簡稱,採用這種方法能採用這種演算法能使計算機計算離散傅利葉變換所需要的乘法次數大為減少,特別是被變換的抽樣點數n越多,fft演算法計算量的節省就越顯著。

fft的基本思想是把原始的n點序列,依次分解成一系列的短序列。充分利用dft計算式中指數因子 所具有的對稱性質和週期性質,進而求出這些短序列相應的dft並進行適當組合,達到刪除重複計算,減少乘法運算和簡化結構的目的。此後,在這思想基礎上又開發了高基和**基等快速演算法,隨著數字技術的高速發展,2023年出現建立在數論和多項式理論基礎上的維諾格勒傅利葉變換演算法(wfta)和素因子傅利葉變換演算法。它們的共同特點是,當n是素數時,可以將dft算轉化為求迴圈卷積,從而更進一步減少乘法次數,提高速度。

首先介紹多項式的兩種表示法:係數表示法和點值表示法:

係數表示法很簡單,就是一般所見到的表示多項式的方法。點值表示法,顧名思義,就是利用點表示多項式,可以想象在座標系內,乙個函式用點值表示,只需要幾個點以及點所對應點的函式值就可以將乙個函式確定下來,這就是點值表示法的思路和原理。

那麼,點值表示法有什麼優點呢?

點值表示法的優點在做多項式乘法的時候體現的淋漓盡致:如果我們用是的係數表示法做兩個多項式相乘的操作,需要將多項式a(x),b(x)的每一項係數輪流做乘法,這個過程是o(n^2)的複雜度,而如果使用點值表示法,則只是需要將x座標相同的點的y座標進行乘法,就能繼續利用這個乘出來的點表示乘出來的多項式。這一過程,只需要o(n*log(n))的複雜度。

既然點值表示法有這種優點,我們如何使用點值表示法進行多項式相乘的操作呢?

首先,展示一下fft的效果:設兩個點值多項式分別為

f(x)=

g(x)=

設它們的乘積是h(x),那麼

h(x)=

所以這裡的時間複雜度只有乙個列舉的o(n)。

如果我們選擇一般的資料進行帶入求值,複雜度依然很高,並沒有得到改善,那麼我們引入新的概念:單位根。

我們都學過複數,所以複數的概念和基本的加減乘除法,在此不多贅述了,只是介紹有關單位根的性質。由dft(前置知識)得到了代入的點即為這些單位根。

複數w滿足wn=1稱作w是n次單位根,左下圖包含了所有的8次單位根(圖中圓的半徑是1)

仔細觀察這個圖,可以得到單位根的性質:如右下圖。這兩個性質在fft的實現中至關重要哦!

通俗易懂 理解「委託」

委託的意義在於實現多型 在於讓物件能夠在程式執行時滿足外界對其的改變。1 乙個物件屬性 動作,如果在編譯時就能確定,可以在這個物件的類裡面來實現。2 乙個物件的屬性 動作,如果在執行時才能確定,則只能通過這個物件的委託來實現。換句話說 類,滿足編譯時對物件的設定和要求。委託,用於滿足執行時對物件的設...

DNS詳解(自己整理的要點 通俗易懂)

1.dns domain name system 網域名稱系統協議 2.部分名詞解析 3.解析網域名稱到ip過程 檢查瀏覽器快取中有沒有此網域名稱,由ttl控制快取時間,由則停止解析 檢查作業系統快取,在host檔案中,截至目前都是在本機中完成 將網域名稱傳送到ldns解析 若ldns仍未命中,到r...

RocketMQ 術語詳解(通俗易懂)

rocketmq中有很多概念,其中包括一些術語和角色。理清楚基本的概念能有效的幫助理解rocketmq的原理以及排查問題。生產者。傳送訊息的客戶端角色。傳送訊息的時候需要指定topic。消費者。消費訊息的客戶端角色。通常是後台處理非同步消費的系統。rocketmq中consumer有兩種實現 pus...