施特拉森演算法

来自testwiki
imported>Hrs814582022年5月23日 (一) 05:16的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

Template:Onesource 施特拉森演算法Template:Lang-en)是一個計算矩陣乘法演算法,時間複雜度為O(nlog27)=O(n2.807)

簡介

矩陣乘法演算法的演進。

施特拉森演算法在1969年由沃爾克·施特拉森所提出,是第一個時間複雜度低於O(n3)矩陣乘法演算法。由於演算法簡單理解,且為第一個被提出來的特性,常被演算法教材拿來當作主定理Template:Lang-en)計算時間複雜度的例子。

另外,因為施特拉森演算法證明了矩陣乘法存在時間複雜度低於O(n3)的演算法,使得更多學者投入研究,尋找更快的演算法。

算法

定義

ABF上的方矩陣。求兩者的積C。一般矩陣可以填0的方法計算令它成為2n×2n矩陣

𝐂=𝐀𝐁𝐀,𝐁,𝐂F2n×2n

計算

A, B, C分成相等大小的方塊矩陣:

𝐀=[𝐀1,1𝐀1,2𝐀2,1𝐀2,2] , 𝐁=[𝐁1,1𝐁1,2𝐁2,1𝐁2,2] , 𝐂=[𝐂1,1𝐂1,2𝐂2,1𝐂2,2]

𝐀i,j,𝐁i,j,𝐂i,jF2n1×2n1

於是

𝐂1,1=𝐀1,1𝐁1,1+𝐀1,2𝐁2,1
𝐂1,2=𝐀1,1𝐁1,2+𝐀1,2𝐁2,2
𝐂2,1=𝐀2,1𝐁1,1+𝐀2,2𝐁2,1
𝐂2,2=𝐀2,1𝐁1,2+𝐀2,2𝐁2,2

引入新矩陣

𝐌1:=(𝐀1,1+𝐀2,2)(𝐁1,1+𝐁2,2)
𝐌2:=(𝐀2,1+𝐀2,2)𝐁1,1
𝐌3:=𝐀1,1(𝐁1,2𝐁2,2)
𝐌4:=𝐀2,2(𝐁2,1𝐁1,1)
𝐌5:=(𝐀1,1+𝐀1,2)𝐁2,2
𝐌6:=(𝐀2,1𝐀1,1)(𝐁1,1+𝐁1,2)
𝐌7:=(𝐀1,2𝐀2,2)(𝐁2,1+𝐁2,2)

可得:

𝐂1,1=𝐌1+𝐌4𝐌5+𝐌7
𝐂1,2=𝐌3+𝐌5
𝐂2,1=𝐌2+𝐌4
𝐂2,2=𝐌1𝐌2+𝐌3+𝐌6

其中Mi,j的計算也是使用施特拉森演算法求得。

評論

一般矩陣乘法的時間複雜度為O(nlog28)=O(n3),施特拉森演算法因為只有每次的分治法Template:Lang-en)只有七個矩陣乘法運算,所以依照主定理Template:Lang-en)可以得出時間複雜度為O(nlog27)=O(n2.807)。但Strassen演算法的數值穩定性較差。

現時時間複雜度最低的矩陣乘法演算法是Coppersmith-Winograd方法的一种扩展方法,其算法复杂度为O(n2.3727)。[1]

相關連結

参考来源

Template:Reflist

  1. Template:Cite web而1990年Coppersmith-Winograd方法提出时的算法复杂度为O(n2.3727)