[循環卷積]總結


一般的線性卷積:

$f[i]=\sum_{j=0}^i a[j]*b[i-j]$

如果將$b$數組循環復制得到$b_N$就能得到周期卷積:

$f[i]=\sum_{j=0}^{N-1} a[j]*b_N[i-j]$

而一般比較常見的循環卷積其實就是周期卷積的主值序列($[0,N-1]$項):

$f[i]=\sum_{j=0}^{N-1} a[j]*(b[i-j])_N$,其中下標$N$表示其主值序列限定在$[0,N-1]$

計算循環卷積時暴力是$n^2$,先求出兩序列的線性卷積再全累加到$[0,N-1]$上就是$nlogn$

 

循環卷積的常見運用:

1、對循環矩陣作乘法時

$[n*n矩陣]*[n行列向量]=[矩陣第一列]\bigoplus [n行列向量]$,其中$\bigoplus$表示循環卷積

如果將矩陣第一行循環復制,發現每次就相當於將列向量向上移動一格,是循環卷積的形式

之所以是矩陣第一列是因為想要矩陣第一行$[c_0,c_1,c_2,c_3]$與$[a_0,a_1,a_2,a_3]$的內積是卷積中第一項,

那么就要將$c$轉為$[c_0,c_3,c_2,c_1]$(也就是第一列),這樣才能保證$f[0]=\sum_{j=0}^{N-1} a[j]*(c[0-j])_N$成立!

 

2、計算下標相加取模的貢獻式時

對於$a[i]*b[j]->f[(i+j)modN]$這樣的貢獻式其實$f$就是$a$和$b$的循環卷積

如果用於$dp$並多次轉移時,可以使用快速冪優化,原理和矩陣快速冪相同

 

其實上面兩種運用是一個意思,可以相互轉化,最后都使用循環卷積+快速冪解決


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM