Download - Algorithm Strassen's Method

Transcript
Page 1: Algorithm Strassen's Method

Strassen’s method

中央資工2B 張竟

2009年11月10日星期二

Page 2: Algorithm Strassen's Method

演算法

問題: Strassen's method要把矩陣切成四塊,n一定要是2的倍數才能做

當n不是2的倍數時?

切成四塊相乘 最後一行最後一列寬高為1 (A12、B12的寬為1,A21、B21的高為1)

對A11*B11做Strassen 其餘部份直接做

2009年11月10日星期二

Page 3: Algorithm Strassen's Method

演算法

當n<=8時,就不再用Strassen’s method而改成直接n3的方式做。

在計算M1~M7時,步驟如以下:

先把MX的子元素算出來(M1的子元素為A11+A22和B11+B22)

用Strassen's method遞迴求出MX

再去計算MX+1

2009年11月10日星期二

Page 4: Algorithm Strassen's Method

記憶體配置

硬幹: 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日星期二

Page 5: Algorithm Strassen's Method

測試方法

測試環境: Pentium D 3.00GHz / Freebsd 7.0-RELEASE 32bit / gcc 4.2.1

和一個使用n3計算矩陣相乘的程式比較不同n的計算時間。

寫了一個python程式去做測試 該程式作用為 :

對不同n產生亂數的兩個輸入矩陣,其中每個數的範圍是-100~100

分別使用兩個程式跑並計算其時間

比對兩個程式的輸出是否一樣

輸出兩者的時間

2009年11月10日星期二

Page 6: Algorithm Strassen's Method

測試結果

2009年11月10日星期二

Page 7: Algorithm Strassen's Method

測試結果

2009年11月10日星期二

Page 8: Algorithm Strassen's Method

測試結果

2009年11月10日星期二

Page 9: Algorithm Strassen's Method

測試結果

2009年11月10日星期二

Page 10: Algorithm Strassen's Method

結論

當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日星期二