Algorithm Strassen's Method
-
Upload
jim-chang -
Category
Technology
-
view
1.639 -
download
4
Transcript of Algorithm Strassen's Method
Strassen’s method
中央資工2B 張竟
2009年11月10日星期二
演算法
問題: Strassen's method要把矩陣切成四塊,n一定要是2的倍數才能做
當n不是2的倍數時?
切成四塊相乘 最後一行最後一列寬高為1 (A12、B12的寬為1,A21、B21的高為1)
對A11*B11做Strassen 其餘部份直接做
2009年11月10日星期二
演算法
當n<=8時,就不再用Strassen’s method而改成直接n3的方式做。
在計算M1~M7時,步驟如以下:
先把MX的子元素算出來(M1的子元素為A11+A22和B11+B22)
用Strassen's method遞迴求出MX
再去計算MX+1
2009年11月10日星期二
記憶體配置
硬幹: m(n)=9*m(n/2)+3*n2 太浪費空間了
預先開好所有需要的記憶體空間
對每層(n/2,n/4...etc)都開兩組陣列
存兩個輸入的矩陣
存M1~M7的運算結果(M1~M7共七個),大小都是那層矩陣的n*n。
f(n)=∑ 9*(n/(2k))2 + 2*n2 + Θ(lg n) = Θ(n2) k=1
lg n
2009年11月10日星期二
測試方法
測試環境: Pentium D 3.00GHz / Freebsd 7.0-RELEASE 32bit / gcc 4.2.1
和一個使用n3計算矩陣相乘的程式比較不同n的計算時間。
寫了一個python程式去做測試 該程式作用為 :
對不同n產生亂數的兩個輸入矩陣,其中每個數的範圍是-100~100
分別使用兩個程式跑並計算其時間
比對兩個程式的輸出是否一樣
輸出兩者的時間
2009年11月10日星期二
測試結果
2009年11月10日星期二
測試結果
2009年11月10日星期二
測試結果
2009年11月10日星期二
測試結果
2009年11月10日星期二
結論
當n小Strassen’s method與傳統n3時間很接近
Strassen’s method 在n=120~130超車
n夠大時,時間f(n) = 7*f(n/2)
n3的方法不知到為什麼比Strassen還不穩定Orz.........
not pure Strassen’s method?
2009年11月10日星期二