轉載地址:http://blog.renren.com/share/408963653/15068964503(作者 : 徐可揚)
其實我感覺這個學期算法最難最搞不懂的絕對不是動態規划啊!絕對是快速傅里葉變換啊!最近才弄懂有木有。
有不少人問我,於是干脆就寫成日志吧。
首先明確一下基本概念吧,就三點,DFT,FFT,蝴蝶操作。
DFT(離散傅里葉變換):書上寫的最清楚的一句話叫做,向量y=(y0,y1,……yn-1)是系數向量a=(a0,a1,,……,an-1)的離散傅里葉變換,也寫作y=DFTn(a)。說白了,就是求n個y值,但是n個自變量x的取值很特殊
FFT(快速傅里葉變換):這個名詞好理解,就是很快地算出這n個y值。一般我們計算n個n次的多項式值需要O(n^2)的時間。現在用FFT可以減少到O(n*logn)。具體原理一兩句話說不完……要考的話也太理論性了…
蝴蝶操作:這個應該是讓大家最費解的…他就是一個FFT得實際應用…因為這是實踐的東西所以要掌握。書上有一個圖,雖然感覺看書不一定看的怎么懂,但是這個圖還是要記住。不過我覺得從下往上寫看起來更舒服。
轉過來以后,向左邊是加,向右邊是減。謹記啊!
突然發現好難解釋,先把宋老師課件里面上次坑爹的沒有答案的課后練習拿來看看。
我這里a0,a1,a2……就不調換順序了,其實是一樣的,格式不同罷了。
a=(0,1)
經過FFT,Y=(1,-1),這個就是書上最簡單的應用了。
再來一個簡單的 a=(1,0).
y=(1,1).
我覺得要考試一般就是考四個的吧,兩個太簡單了,8個的太復雜了(我后面有寫)
例子
a=(1,1,0,1)
y=(3,1,-1,1) 注意算出來是 y0,y2,y1,y3的順序。
a=(0,1,2,3)
y=(6,-2-2i, -2 , -2+2i).
注意右上角的蝶形運算中的旋轉因子變成了(恩!?怎么不能插公式啊!)w(1/4)=i。。。那是因為在a0,a2的蝶形運算中我們多乘了(n/2),這里n=2.(這個我解釋不來…不過這個數是固定的,背就行了)。
那我上個八個的,有點復雜,估計可能不會考
a=(0,1,2,3,4,5,6,7).
y的順序如圖
告訴大家一個比較好的辦法判斷是否算對了,直接人肉使用O(n^2)算法就好了,舉四個的例子。就是把x得值帶入多項式y=a3*x^3+a2*x^2+a1*x+a0算出y值什么的。x0=1,x1=i,x2=-1,x3=-i帶入。這樣的話,其實考察算沒算對完全是個偽命題嗎……
再提醒一次,左加右減哦!
最后再說一下這玩意有什么用,什么信號學的廢話就不說了。無非是FFT用N*LogN時間算出點值方便用點值法算出多項式乘法的系數結果,這個大家看書上510的圖我覺得就能理解了。插值神馬的,背公式吧……雖然我也不記得了。
時間有點緊迫,感覺寫的巨爛無比,大神們如果發現寫錯了留言給我立馬改,關鍵不要誤人子弟……