随笔分类 -  矩阵乘法

多米诺骨牌 优化版
摘要:算法:在之前搜索出状态的基础上,再压缩一次状态。View Code //by yefeng#include<iostream>using namespace std;typedef long long LL; const int mod = 9937;int mask,idx, n , m;struct Matrix{ int mat[257][257]; void zero() { memset(mat,0,sizeof(mat)); } void unit(){ memset(mat,0,sizeof(mat)); fo... 阅读全文

posted @ 2012-08-18 16:38 more think, more gains 阅读(237) 评论(0) 推荐(0)

HDU 4332 Constructing Chimney 矩阵快速幂
摘要:算法:1.状态压缩2.搜索3.矩阵快速幂View Code #include<iostream>using namespace std;typedef long long LL;const int mod = 1000000007;const int mask = 255;struct Matrix{ LL mat[100][100]; void unit(){ memset(mat,0,sizeof(mat)); for(int i = 0; i < 100; i++) mat[i][i]=1; } void zero(){... 阅读全文

posted @ 2012-08-18 16:37 more think, more gains 阅读(199) 评论(0) 推荐(0)

矩阵乘法 经典题目
摘要:1。 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值把给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j。令C=A*A,那么C(i,j)=ΣA(i,k)*A(k,j),实际上就等于从点i到点j恰好经过2条边的路径数(枚举k为中转点)。类似地,C*A的第i行第j列就表示从i到j经过3条边的路径数。同理,如果要求经过k步的路径数,我们只需要二分求出A^k即可。--摘自,http://www.matrix67.com/blog/archives/276/理解:为什么k步的路径数,我们只需要二分求出A^k?因为每步实际做一次矩阵乘法,矩阵乘法定 阅读全文

posted @ 2012-08-17 11:31 more think, more gains 阅读(354) 评论(0) 推荐(0)

矩阵一维递推 菲波拉契数
摘要:算法:利用矩阵乘法求解递推,时间复杂度O(lgn)View Code #include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<vector>#include<string>#include<math.h>#include<map>#include<set>#include<algorithm>using namespace std;#define MAXN 10#defin 阅读全文

posted @ 2012-08-16 21:28 more think, more gains 阅读(216) 评论(0) 推荐(0)

矩阵乘法
摘要:1.定义:(来自百度)基本定义 它是这样定义的,只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×n的矩阵a(m,n)左乘一个n×p的矩阵b(n,p),会得到一个m×p的矩阵c(m,p),满足 矩阵乘法满足结合律,但不满足交换律 一般的矩乘要结合快速幂才有效果。(基本上所有矩阵乘法都要用到快速幂的) 在数学中,一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应相乘后所有m个乘积的和。比如,下面的 阅读全文

posted @ 2012-08-16 19:52 more think, more gains 阅读(340) 评论(0) 推荐(0)

导航