O(1) 的小乐

Job Hunting

公告

记录我的生活和工作。。。
<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

  • 随笔 - 182
  • 文章 - 1
  • 评论 - 41
  • 引用 - 0

留言簿(10)

随笔分类(70)

随笔档案(182)

文章档案(1)

如影随形

搜索

  •  

最新随笔

最新评论

阅读排行榜

评论排行榜

Strassen Algorithm
[C11   C12 ]   [A11   A12 ]  [B11   B12 ]
            =              ×
 C21   C22      A21   A22      B21  B22

 

普通方法

C11 =A11*B11+A12*B21

C12=。。

C21=。。。

C22=。。。

此递归公式为T(n)=8T(n/2)+O(n^2)  时间复杂度为O(n^3)

Strassen方法的递推公式为:

 

 P    = (A   + A  )(B   + B   )
   1       11     22   11    22
 P2   = (A21 + A22)B11
 P3   = A11(B12 -  B22)
 P4   = A22(B21 -  B11)
 P5   = (A11 + A12)B22
 P    = (A   - A   )(B   + B   )
   6       21     11   11    12
 P7   = (A12 - A22)(B21 + B22)
C11   = P1 + P4 - P5 + P7
C12   = P3 + P5
C21   = P2 + P4

C22   = P1 + P3 - P2 + P6

 

        {
         7T (n/2) + cn   if n > 1
T (n) =   c               if n = 1

T(n) = O(nlog 7) = O(n2.81).

 

时间复杂度就马上降下来了。。但是不要过于乐观。

从实用的观点看,Strassen算法通常不是矩阵乘法所选择的方法:

1 在Strassen算法的运行时间中,隐含的常数因子比简单的O(n^3)方法常数因子大

2 当矩阵是稀疏的时候,为稀疏矩阵设计的算法更快

3 Strassen算法不像简单方法那样子具有数值稳定性

4 在递归层次中生成的子矩阵要消耗空间。

 

所以矩阵乘法一般意义上还是选择的是朴素的方法,只有当矩阵变稠密,而且矩阵的阶数>20左右,才会考虑使用Strassen算法。

posted on 2010-08-30 10:45 Sosi 阅读(1533) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


统计系统