一般情况下矩阵乘法需要三个for循环,时间复杂度为O(n^3),现在我们将矩阵分块如图:( 来自MIT算法导论 ) 一般算法需要八次乘法 r = a * e + b * g ; s = a * f + b * h ; t = c * e + d * g; u = c * f + d * h; strassen将其变成7次乘法,因为大家都知道乘法比加减法消耗更多,所有时间复杂更高! strassen的处理是: 令: p1 = a * ( f - h ) p2 = ( a + b ) * h p3 = ( c +d ) * e p4 = d * ( g - e ) p5 = ( a + d ) * ( e + h ) p6 = ( b - d ) * ( g + h ) p7 = ( a - c ) * ( e + f ) 那么我们可以知道: r = p5 + p4 + p6 - p2 s = p1 + p2 t = p3 + p4 u = p5 + p1 - p3 - p7
2021-03-19 11:01:26 3KB 矩阵乘法 strassen算法
1
【P147页 5.4.2 Strassen矩阵乘法】的 Mathematica 计算验证.nb 是 Mathematica12.1的编程代码验证,Mathematica符号计算语言简洁明了! 欢迎进行下载验证!
1
矩阵相乘,普通算法的时间界是10的3此方,而采用strassen算法可提高运算效率。
2019-12-21 21:17:48 9KB 矩阵相乘
1
strassen矩阵乘法的C代码 【问题描述】 从文件arr.in中读入一个m行k列的整数矩阵a和一个k行n列的整数矩阵b(1 < m, k, n < 200),在标准输出上输出这两个矩阵的乘积。 【输入形式】 输入文件arr.in中有m+k行,前m行是矩阵a的元素aij,后k行是矩阵b的元素bij (-3000 < aij, bij < 3000)。 【输出形式】 输出结果为m行,每行n个元素,按整数左对齐方式输出,每个元素占相同的位数,且各个元素之间空格的最少数量应等于1。 【输入样例】 1 0 0 1 1 1 1 1 【输出样例】 1 1 1 1
2019-12-21 18:54:38 9KB strassen 矩阵乘法 C
1
Strassen’s 矩阵乘法—分治法实现代码,能输出最终结果矩阵和每一次递归的S1~S7。
2019-12-21 18:48:15 2KB Strassen
1