学习记录主讲矩阵乘法(原理、计算、功能、应用)
模板为矩阵乘法和矩阵快速幂的C++代码实现
例题为矩阵快速幂求斐波那契数和一个ACM的具体题目(用矩阵快速幂优化概率DP)
学习记录:
(from :http://www.ruanyifeng.com/blog/2015/09/matrix-multiplication.html)
看个例子:
计算规则:
第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),
然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3。
用代码显示就是:
/*
假设 A 是 m*p 的矩阵 , B 是 p*n 的矩阵
记 C = AB (C 是 矩阵 A与B的乘积)
那么 C 是 m*n 的矩阵
*/
for (int i = 1;i <= m;++i)//A的行
{
for (int j = 1;j <= n;++j)//B的列
{
for (int k = 1;k <= p;++k)//通过公式求C
{
C[i][j] += A[i][k]*B[k][j];
}
}
}
也就是说,结果矩阵第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和。