• 初学矩阵乘法


    前言

    何谓矩阵乘法?就是矩阵之间的乘法。

    矩阵乘法并不是简单地将两个矩阵中对应位置上对应元素相乘,而是更为复杂。

    矩阵乘法应用广泛,典例就是优化递推。

    矩阵乘法

    首先我们要知道,矩乘是一个(n*m)的矩阵乘上一个(m*k)的矩阵,得到一个(n*k)的矩阵。

    由此容易发现,矩乘是不满足交换律的

    其中,第一个矩阵第(x)行的元素,与第二个矩阵第(y)列的元素,逐一对应相乘之后再取得的和,就是答案矩阵中第(x)和第(y)列的值。

    用式子表示,就是:

    [res_{x,y}=sum_{i=1}^mA_{x,i}cdot B_{i,y} ]

    用代码表示,就是:(注意,字母表示有点出入)

    inline Mat operator * (const Mat& A,const Mat& B)
    {
    	Mat res(A.n,B.m);register int i,j,k;
    	for(k=1;k<=A.m;++k) for(i=1;i<=A.n;++i)
    		for(j=1;j<=B.m;++j) res.v[i][j]+=A.v[i][k]*B,v[k][j];
    	return res;
    }
    

    矩阵快速幂

    矩阵快速幂与普通的快速幂类似,主要是要注意答案初始化的问题,一般会初始化为左上-右下对角线上都是(1),其他位置都是(0)

    做矩阵快速幂的矩阵应该是形如(n*n)的矩阵。

    代码实现如下:

    inline Mat operator ^ (Mat x,int y)
    {
    	Mat t(x.n,x.n);for(int i=1;i<=t.n;++i) t.v[i][i]=1;
    	W(y) y&1&&(t=t*x,0),x=x*x,y>>=1;return t;
    }
    

    应用

    对于一个递推式,我们可以通过求出其转移矩阵,然后矩阵快速幂来快速求出答案。

    而在一些数据结构中也可以用它来较好地维护信息。

  • 相关阅读:
    MVC页面打印成pdf插件Rotativa
    lambda表达式嵌套
    MVC+EF五种条件查询获取数据列表方式
    自己写的通用分页存储过程
    Llinux命令大全之软件管理命令
    .net开发 chrome核心浏览器组件
    常用的SQL日期操作
    Linux各版本介绍说明
    大数据环境搭建
    markdown语法链接新页面打开
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/MatMul.html
Copyright © 2020-2023  润新知