多項式與快速傅立葉變換
按捺不住,終于還是想把FFT學一遍。在青島站的熱身賽看到一道題的數據范圍特別大,頓時不知所措。雖然賽后告訴我暴力也可以過,但正解還是用FFT。感覺FFT已經很普及了,然而我還是不會。這讓退役選手感覺亞歷山大,決定退役后把這塊知識補一補。這一章內容比較少,希望自己能順利看完。
多項式表示
分為系數表示和點值表達。
系數表達就是由一個向量表示系數,分別與自變量對應的冪次相乘求和的形式。求值的時候多采用秦九韶算法(霍納法則)來做。
如果求兩個多項式乘積的話,還可以先計算兩個自變量乘積的冪次,然后把對應的系數乘起來更新到一個系數向量里(比如系數向量a和b求乘積分別加和以后更新到c上,這個過程也被稱為卷積),這個復雜度是O(n^2)的。
點值表達就是已知自變量的一些賦值和結果,然后用這么一個集合來表達一個多項式。通過一個點值表達的集合來確定一個多項式的形式這個過程叫做“插值”。要判斷插值是否可行,就是要判斷這個集合是不是能唯一確定一個多項式。線性代數中我們學過,當且僅當一個矩陣可逆(對應行列式值不為0)的時候,矩陣作為系數的矩陣方程才有唯一解。這不就正好對應了點值表達的集合嗎,把已知的{x}和已知的{y}表示出來,然后設對應的系數矩陣為{a}。矩陣的形式恰好是范德蒙德矩陣,這個矩陣對應的行列式的值我們也知道(是一連串的乘積),那就可以直接用對應行列式值不為0來判斷這個矩陣是否可逆了,這樣就能判斷是不是有唯一解了。所以范德蒙德行列式當且僅當里面的所有基本的元素都不相等的時候,才可以唯一確定。