COMP9101 算法設計 week3

FFT快速傅立葉

假設我們有2個多項式:
PA(x) = Anx^n…+A0. PB(x)=Bnx ^n+…+B0

  1. 將他們變成value表示法:
    因爲它們兩個的乘積是2n階的,我們需要2n+1個不同的x:
    PA(x)<-> {(x0,PA(x0)),…(x2n, PA(x2n))}
    PB(x)<->{(x0,PB(x0)),…,(x2n, PB(x2n))}

2.將它們點對點相乘
{(x0, PA(x0)*PB(x0)), (x1,PA(x1)PB(x1))…(x2n, PA(x2n)PB(x2n))}

3.我們將PC(x)代入:
PC(x)=C(2n)x^2n+C(2n-1)x ^2n-1…+C1x+C0

在K算法時,x的取值是-n到n,但當n很大的時候會爆炸。
方式一是變成複數。

複數

z=a+ib, 也可以表示爲模 |z|=√(a ^ 2+b ^ 2) 和輻角arg(z)—>取值爲(-π,π], 並且滿足:
z=|z|eiarg(z) =|z|(cosarg(z)+isinarg(z))
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

單位根

單位根的階n是複數且滿足z^n=1.
如果z^ n = |z|^n (cos(n arg(z)) + i sin(n arg(z))) = 1,
則|z|=1 並且 n個 arg(z)是2π的倍數。
所以, narg(z)=2πk, 即arg(z)=2πk/n. k的範圍是0~n-1.
我們讓 ωn = e ^(i2π/n)—>k=1, ω被稱是n階單位原根。
在這裏插入圖片描述
如果所有的其他有相同階的原根可以被獲得作爲ω^k,這個n階的單位根ω是原根。

對於ωn=e^(2π/n) 並且0<=k<=n-1,
((ωn) ^k) ^n = (ωn ^n) ^k = 1,
由於(ωn) ^k 中k=0…n-1, 至少n個不同的n階單位根(即x ^n-1=0). 我們得出結論每個n階單位根應該是(ωn) ^k形式的。
對於任意兩個單位根(ωn) ^k和(ωn) ^m有(ωn) ^k*(ωn) ^m=(ωn) ^(k+m).

如果k+m>=n 則 對於 l=(k+m)%n有k+m = n+l, 則有 (ωn) ^k*(ωn) ^m = (ωn) ^(k+m)=(ωn) ^(n+l)=(ωn) ^l * 1 = (ωn) ^l (0<=l<n).
所以,兩個任意同階單位根的的乘積是另外一個同階單位根。
所以單位根任意升降階,結果也會是同階單位根。

The Cancelation Lemma:

對於任意整數k,m,n, (ωkn) ^(k+m)=(ωn) ^m.
證明:
在這裏插入圖片描述
所以,2n階單位根的平方是n階單位根。

離散傅立葉變換

讓A=(A0…An-1)是n個實數或複數的序列,
變成多項式形式PA(x)=Sum(from 0 to n-1)Ajx^j,
計算PA(ωn ^k) for all 0<=k<=n-1.

(PA(1),PA(ωn ^2)…PA(ωn ^(n-1)))被稱作A=(A0…An-1)的DFT離散傅立葉變換。

用分治法計算(PA(1),PA(ωn ^2)…PA(ωn ^(n-1)))被稱作快速傅立葉變換
在這裏插入圖片描述
我們使用n+m-1階單位根代替K算法。剩餘的m-1用係數0填充。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
快速傅立葉的時間是O(nlogn), 小於n的任何次方。
在這裏插入圖片描述

快速傅立葉變換

分治法裏我們將PA(x)分成奇數和偶數次冪。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

時間複雜度分析

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

傅立葉快速反變換

在這裏插入圖片描述
在這裏插入圖片描述

計算卷積C=A*B

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

卷積的應用:Moving Average Smoothing

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

Moving average(黑色)VS 高斯平滑(藍色)

在這裏插入圖片描述
在這裏插入圖片描述

REFERENCE

comp9101 算法設計 week3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章