關於矩陣乘法Strassen演算法的學習筆記與看法

2022-03-28 19:16:09 字數 1646 閱讀 1786

設矩陣 \(a,b,c\) 均為 \(n\) 階方陣,\(n=2^k,k\in z\)

給定 \(a_=\left(a_\right),b_=\left(b_\right)\) ,求解 \(c_=a_\cdot b_\)

將矩陣 \(a,b,c\) 進行分塊,使得分塊後各個子矩陣均為 \(\) 階方陣,記 \(a=\left(

\begin

a_&a_

\\ a_&a_

\end

\right),b=\left(

\begin

b_&b_

\\ b_&b_

\end

\right),c=\left(

\begin

c_&c_

\\ c_&c_

\end

\right)\)

則由矩陣分塊乘法可得:

\(c_=a_b_+a_b_\)

\(c_=a_b_+a_b_\)

\(c_=a_b_+a_b_\)

\(c_=a_b_+a_b_\)

由觀察可得,分塊後需要對 \(\) 階方陣進行 \(8\) 次矩陣乘法與 \(4\) 次矩陣加法

設分塊後需要將矩陣進行 \(a\) 次矩陣乘法與 \(b\) 次矩陣加法,以及 \(c\) 次的某 \(o(n)\) 操作, \(d\) 次的某 \(o(1)\) 操作

不難列出複雜度遞推式:\(t(n)=at()+bn^2+cn+d\)

代入 \(n=2^k\) 得 \(t(k)=at(k-1)+b\cdot 4^k+c\cdot 2^k+d\)

通過解遞推方程可得: \(t(k)=a^k+\cdot 4^k+\cdot 2^k+,a>4\)

代回 \(2^k=n\) 得 \(t(n)=n^+n^2+n+=n^+n^2+o(n^2)\)

因此,代入樸素矩陣分塊的數值 \(a=8,b=4\) 得 \(t(n)=n^+n^2+o(n^2)=n^3-n^2+o(n^2)=o(n^3)\)

在漸進意義下,與普通矩陣乘法無複雜度差別

記錄以下中間矩陣:

\(s_1=b_-b_\)

\(s_2=a_+a_\)

\(s_3=a_+a_\)

\(s_4=b_-b_\)

\(s_5=a_+a_\)

\(s_6=b_+b_\)

\(s_7=a_-a_\)

\(s_8=b_+b_\)

\(s_9=a_-a_\)

\(s_=b_+b_\)

然後再記錄:

\(p_1=a_\cdot s_1\)

\(p_2=s_2\cdot b_\)

\(p_3=s_3\cdot b_\)

\(p_4=a_\cdot s_4\)

\(p_5=s_5\cdot s_6\)

\(p_6=s_7\cdot s_8\)

\(p_7=s_9\cdot s_\)

最後即可得到:

\(c_=p_5+p_4-p_2+p_6\)

\(c_=p_1+p_2\)

\(c_=p_3+p_4\)

\(c_=p_5+p_1-p_3-p_7\)

o(n^)\)

由於複雜度滿足 \(t(n)=n^+n^2+o(n^2)\) ,故如果能通過矩陣間的線性組合,進一步減小矩陣乘法的次數,則漸進複雜度還將更優

strassen矩陣乘法 Strassen矩陣乘法

求矩陣a,b相乘的結果c 直接根據矩陣乘法的定義來遍歷計算。c 語言 void matrixmul int a,int b,int c,int m,int b,int n void test3 int b 3 2 int c 2 2 matrixmul int a,int b,int c,2,3,2...

Strassen矩陣乘法

strassen矩陣乘法 strassen矩陣乘法是通過遞迴實現的,它將一般情況下二階矩陣乘法 可擴充套件到 階,但strassen矩陣乘法要求 是 的冪 所需的8次乘法降低為7次,將計算時間從o ne3 降低為o ne2.81 矩陣c ab,可寫為 c11 a11b11 a12b21 c12 a1...

Strassen矩陣乘法

矩陣乘法是線性代數中最常見的運算之一,它在數值計算中有廣泛的應用。若a和b是2個n n的矩陣,則它們的乘積c ab同樣是乙個n n的矩陣。a和b的乘積矩陣c中的元素c i,j 定義為 若依此定義來計算a和b的乘積矩陣c,則每計算c的乙個元素c i,j 需要做n個乘法和n 1次加法。因此,求出矩陣c的...