目录 1、矩阵相乘的朴素算法 2、矩阵相乘的strassen算法 3、完整测试代码c++ 4、性能分析 5、参考资料内容 ...
分类:
其他好文 时间:
2014-09-09 18:16:29
阅读次数:
407
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4965
题意:一个矩阵N*K的矩阵A,一个K*N的矩阵B,(4
思路:像之前那道矩阵乘法一样,特别大的矩阵直接进行乘法在没有小规律的帮助时是不可能直接过的(目前看即使是Strassen矩阵算法也不会加速到要求以内)题目中给的C矩阵是1000*1000的矩阵进行快速幂是一定超时的,所以我注意到了A矩阵的...
分类:
其他好文 时间:
2014-08-19 20:50:25
阅读次数:
249
分治算法,有很多典型的问题,如最近点问题、线性选择问题、整数划分问题、大整数成绩问题、棋盘覆盖问题、循环赛日程表、二分搜索、Strassen矩阵乘法、汉诺塔等。准备花些时间逐个解决这些问题,并用Java实现,从最近点问题开始。网上找到一些代码,标题如“java 用蛮力法和分治法求解最近对有关问题”,虽然体现了分治,但划分不够彻底,因此我重新对其进行了实现。
一、基本思想及策略:...
分类:
编程语言 时间:
2014-08-12 22:10:54
阅读次数:
233
题意很简单,就是两个大矩阵相乘,然后求乘积。用Strassen算法的话,当N的规模达到100左右就会StackOverFlow了况且输入的数据范围可达到800,如果变量还不用全局变量的话连内存开辟都开不出来 1 #pragma comment(linker, "/STACK:16777216") ....
分类:
其他好文 时间:
2014-08-05 22:03:30
阅读次数:
231
Strassen矩阵乘法是通过递归实现的,它将一般情况下二阶矩阵乘法(可扩展到n阶,但Strassen矩阵乘法要求n是2的幂)所需的8次乘法降低为7次,将计算时间从O(nE3)降低为O(nE2.81)。矩阵C = A*B,可写为C11 = A11B11 + A12B21C12 = A11B12 + ...
分类:
其他好文 时间:
2014-07-13 22:29:05
阅读次数:
438
package chap04_Divide_And_Conquer;import static
org.junit.Assert.*;import java.util.Arrays;import org.junit.Test;/** * 矩阵相乘的算法 *
* @author xiaojintao....
分类:
其他好文 时间:
2014-06-09 16:12:24
阅读次数:
273
在通过汉诺塔问题理解递归的精髓中我讲解了怎么把一个复杂的问题一步步recursively划分了成简单显而易见的小问题。其实这个解决问题的思路就是算法中常用的divide
and conquer, 这篇日志通过解决矩阵的乘法,来了解另外一个基本divide and conque思想的strassen算...
分类:
其他好文 时间:
2014-05-26 11:53:42
阅读次数:
365
strassen算法可以看做是分治递归法求解矩阵乘法的改进。
利用分治递归法求解矩阵乘法的过程大致:
矩阵C = A * B(A、B、C都是n x n矩阵)
可以发现(A11 * B11)、(A12 * B21)……等子矩阵的乘法运算需要继续递归。上面有8个乘法,所以需要递归8次。
时间复杂度关系公式 T(n) = 8T(n/2) + O(n^2),这里8T(n/2)是8次递归...
分类:
其他好文 时间:
2014-05-01 08:43:52
阅读次数:
549