Strassen Algorithm 由來猜想&記憶方法

楊皓崴
無詩的羊圈
Published in
3 min readJun 4, 2018

當初在修演算法概論時老師只是當Divide and Conquer經典例子來介紹,看著這11奇異的式子,假使老師說不考,學生也很難會想探討為什麼長這樣子,於是乎就被擱置在記憶深處直到最近一直扯到矩陣處理問題才又想到它(雖然也不是重要問題就是了XD)。

矩陣乘法中的效能瓶頸落在各項子矩陣乘法的數量當中,若能減少乘法的計算需求便能加快計算速度,Strassen’s algorithm主要是先將矩陣各四等分,再把原先八個子矩陣乘法利用加減法先整併了其中兩項計算,使之下降到只要7個子矩陣乘法便可完成計算,即便多了好幾道加減法,但隨著矩陣行列數目上升,相較於原先計算是快上許多,詳見演算法相關書籍。

以下開始偏離正道時間( #豆知識時間 ),個人其實沒有看到關於緣由的解釋,從線代啟示錄有看到矩陣操作的解釋但你很難憑空弄出那些東西,對於來源很偏執的數學人來說,至少知道他黏合了什麼或是知道怎樣從無到有,用起來會比較安心,於是乎便手動展開觀察,因而發現了一點東西。先看到解構的7個式子,其關鍵應該就落在唯一沒有對稱的第一個式子,寫開所有乘式可以看到:

對照原本矩陣的區域可以看到,紅色的乘式矩陣中根本沒出現過,而第二、三式子各融合了四個乘法在內,操作上比較像是要消去其他式子的副產品(藍色是重複出現在後四項式子、綠色則已出現在第一式中),一則猜測原創者可能是先黏合了相似性高的第二、三式再慢慢消去不要的項最後發現兩者都需要第一式來處理餘項(感覺草創很難有這個毅力和跳躍思考走這種推導),再者則是在一連串嘗試之後,在融合最離譜的兩個乘法時發現的驚喜XD。

依照猜測,可以拓展出如下的思路地圖(個人是以第二種狀況來看):

  1. 合併 AE DH 得到 T₁=(A + D)(E + H) ,用在 M₁₁ 先無視沒出現在矩陣的項,則要給予 BG 並拿掉 DH 得到 T₂ =(B ± D)(G H)
  2. 餘下 AH DE BH DG 可整理成 T₄=D(G ± E) T₅ =(B A)H ,與前兩式相加減得到 M₁₁
  3. 而用在 M₂₂ 一樣先無視未在矩陣出現項,得到 T₃ =(C ± A)(F E)
  4. 餘下 AH DE AF CE 可整理成 T₆ =(C D)E T₇=A(F ± H) ,與前兩式相加減得到 M₂₂
  5. 最後再調整正負號即可,不想調整則先固定 T₂ T₃ 看減號在第一個矩陣還是第二矩陣的計算內,而剩下的四個式子相反即可。(也就是整理過程中都上或是都下即可)
  6. 餘下 M₁₂ M₂₁T₄ T₅ T₆ T₇ 兩兩組裝得到。

如此一來要記憶得就只剩它離奇的合併了AE和DH項,如果原先真的是這樣來的話,或許就真的只是實驗結果而已吧?願聞其詳。

感覺自己想寫些部落格或網誌時,正事就會突然增加,上週就這樣放掉一篇了,不過我也不敢立flag說要加速補齊就是了,倒是這陣子要補js技術債,感覺會是接下來的題材也說不定(馬上立flag),會在再自行摸索看看咩,也歡迎各種提案和提問~。

--

--

楊皓崴
無詩的羊圈

資料科學見習者,交大數據科學與工程研究所碩士生,正與資料探勘和資料視覺化培養感情的一頭羊。Data science, Python coder, beep beep, M.S. of D.S. student.