設矩陣 \(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的...