對於兩個離散序列f[n],g[m],可以將卷積定義為
s[k]=∑f[j]g[k-j]
回憶我們學過的多項式乘法,比如(x2+2x+1)(3x+2)
一般的計算方式是
(x2+2x+2)(3x+2) = (x2+2x+2)*3x+(x2+2x+2)*2
= 3x3+6x2+6x+2x2+4x+4
合併同類項之後
得到 3x3
6x2+2x2
6x+4x
4----------------
3x3+8x2+10x+4
從線性代數的角度來看,多項式可以構成乙個向量空間,通過選定一組基底
就可以很容易將多項式與某維度的座標向量相對應,這裡採用降冪
1.(x2+2x+2)—>(1 2 2) ;
2.(3x+2)-
à(3 2)
通過上面的卷積定義,可以得到向量卷積的定義
對於長度為m的向量u與長度為n的向量v的卷積
w(k)= ∑(u(j)*v(k+1-j))
向量w的長度為m+n-1
ps:向量u對應的多項式最高次冪為
xm-1
,向量v的是
xn-1
,兩個多項式相乘之後最高次冪為
xm+n-2
,最低次冪為x0
,也就是1,所以得到的長度為m+n-1
根據上面的向量卷積的形式來重新處理座標向量1,2(將1倒置)
(2 2 1)*(3 2)
計算方式:
a的每一行都代表序列(2 2 1)移動一位,然後與x做內積,通過一系列的向量內積,這樣也得到了多項式相乘的結果。
多項式乘法
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld et reo 吃完了元宵,又開始思考數學問題了。這次他拿了兩個多項式 p mathscrp 和 q mathscrq 他知道這兩個多項式的乘積也是乙個多項式,但他不...
多項式乘法
l1和l2是兩個帶頭結點的單鏈表表示的多項式,編寫演算法計算兩個多項式的乘積,運算結果仍用單鏈表進行儲存 include using namespace std typedef struct lnode lnode,linkedlist 查詢計算結果應該插入的位置 param l 鍊錶的頭結點指標 ...
FFT與多項式乘法
鑑於網上關於fft作用的文章並不少,這裡盡量少說廢話,直接說如何理解和具體實現 關於多項式乘法,通常是用係數乘積的方式,這樣的時間複雜度是o n 2 n為多項式項數。這可以滿足大多數的乘法需求,然而當位數大於1000時,此法用起來就顯得捉襟見肘 於是我們便有了偉大的fft來解決這個問題 係數表示法 ...