矩阵简述

2023-10-27

矩阵加法
    C~ij~ = A~ij~ + B~ij~ 。
矩阵数乘

​ 将该数与每一个元素相乘。

矩阵乘法

​ 设A大小为n * m,B大小为m * p。则A和B的乘积得到的矩阵大小为n * p。

​ 其中每一项 (AB)~ij~ = \(\sum_{k=1}^m\) A~ik~B~kj~ 。

矩阵乘法不满足交换律

矩阵乘法满足结合律和分配律

单位矩阵

​ A~ii~ = 1,即左上到右下的对角线都为1,此时任何矩阵乘以单位举证就是它本身。

矩阵快速幂

​ 快速求矩阵A的N次方。

​ 由于矩阵符合乘法分配律,所以与正常快速幂同理,A^n^ = A^n/2^ * A^n/2^,

\(PS\):正常快速幂中的累乘器的初始值为单位矩阵,A^1^为所给矩阵。

Luogu P3390,矩阵快速幂模板

#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define mod 1000000007
#define maxn 105

int n;

struct mat{
    ll a[maxn][maxn];
    mat (){memset(a,0,sizeof(a));}
    inline void build(){for(int i = 1;i<=n;++i)a[i][i] = 1;}
}a;

mat operator * (const mat &x,const mat &y){
    mat z;
    for(int k = 1;k<=n;++k)
        for(int i = 1;i<=n;++i)
            for(int j = 1;j<=n;++j)
                z.a[i][j] = (z.a[i][j] + x.a[i][k]*y.a[k][j]%mod)%mod;
    return z;
}

ll k;

inline void init(){
    cin>>n>>k;
    for(int i = 1;i<=n;++i)
        for(int j = 1;j<=n;++j)
        cin>>a.a[i][j];
}

int main(){
    init();
    mat ans;
    ans.build();
    do{
        if(k&1)ans = ans*a;
        a = a*a;
        k >>= 1;
    }
    while(k);
    for(int i = 1;i<=n;putchar('\n'),++i)
        for(int j = 1;j<=n;++j)
          cout<<ans.a[i][j]<<" ";
    return 0;
}
矩阵加速数列

​ 我来讲一下学习心得吧。

​ $ e.g$ $,a[x] = a[x-1] + a[x-3] (x > 3),a[1] = a[2] = a[3] = 1 $ ,用矩阵加速递推

\(: PS:\) 注意看清普通矩阵递推普通递推

​ 首先,普通矩阵递推和普通递推是等效的,而因为矩阵可以快速幂进行加速,所以构造矩阵矩阵快速幂加速普通矩阵递推。

​ 对于这一题,我们发现对下次或今后递推有用的变量按顺序构成的矩阵是这样的:

​ 以下矩阵中a[]表示的是一个值。

\[ \left[\begin{matrix}a[x-1]\\a[x-2]\\a[x-3]\end{matrix}\right]\]那么我们普通矩阵递推,求的就是a[x]。根据题目,\(a[x] = a[x-1]+a[x-3]\)

​ 所以我们递推下去就得到了 \[ \left[\begin{matrix}a[x-1]+a[x-3] = a[x]\\a[x-1]\\a[x-2]\\a[x-3]\end{matrix}\right]\],显然我们要求a[x]。

​ 但是a[x-3]对今后的递推已经无用了!我们就把它删掉,就有了\[ \left[\begin{matrix}a[x]\\a[x-1]\\a[x-2]\end{matrix}\right]\]

​ 那么我们就需要构造另外一个矩阵A,使得\[ A * \left[\begin{matrix}a[x-1]\\a[x-2]\\a[x-3]\end{matrix}\right] = \left[\begin{matrix}a[x]\\a[x-1]\\a[x-2]\end{matrix}\right]\]

​ 因为\(a[x] = a[x-1] * 1+a[x-3] * 1\),所以得到A矩阵第一行为1,0,1(根据矩阵乘法

​ 因为我们当前已经把a[x-1]和a[x-2]算出来了!所以A矩阵的第二行为1,0,0,第三行为0,1,0。

​ 所以有\[ A = \left[\begin{matrix}1&0&1\\1&0&0\\0&1&0\end{matrix}\right] \]

\(:PS:\)随着题目的变化,这个系数可以不为1或0.

​ 所以,由于每一个矩阵乘以A都能得到下一个矩阵,那么我们将初始矩阵\(a[1] = a[2] = a[3] = 1\)乘以A的N-3次方就能得到第N+1个矩阵(根据矩阵乘法结合律,我们可以先快速幂算A^N-3^)。

​ 注意,这里的初始矩阵a[1] = a[2] = a[3] = 1,乘任何矩阵等于它本身,所以可以忽略。

​ 为什么是N-3次方?因为a[1],a[2],a[3]已经给出a[1],a[2],a[3]已经给出,相当于初始矩阵是第三个矩阵,准备求第四个矩阵,而第四个矩阵的第一项是a[N+1],所以我们只要输出第四个矩阵的第二行第一个。(根据我们对A的定义,此时A[ 2 ] [ 1 ]表示a[x-1]*1)

Luogu P1939,矩阵加速数列模板

#include<bits/stdc++.h>
using namespace std;

const int mod = 1e9+7;
#define ll long long

int T,n;

struct mat{
    ll m[5][5];
}ans,t;

void init(){
    memset(ans.m,0,sizeof(ans.m));
    for(int i = 1;i<=3;++i)ans.m[i][i] = 1;
    memset(t.m,0,sizeof(t.m));
    t.m[1][1] = t.m[1][3] = t.m[2][1] = t.m[3][2] = 1;
}

mat mul(mat a,mat b){
    mat res;
    memset(res.m,0,sizeof(res.m));
    for(int i = 1;i<=3;++i)
        for(int j = 1;j<=3;++j)
            for(int k = 1;k<=3;++k)
                res.m[i][j] += (a.m[i][k]%mod)*(b.m[k][j]%mod),
                res.m[i][j] %= mod;
    return res;
}

void qmpow(int p){
    while(p){
        if(p&1)ans = mul(ans,t);
        p>>=1;
        t = mul(t,t);
    }
}

int main(){
    cin>>T;
    while(T--){
        cin>>n;
        if(n <= 3)cout<<1<<endl;
        else{
            init();
            qmpow(n);
            cout<<ans.m[2][1]<<endl;
        }       
    }
}

​ 总结:分析题目,构造初始有效矩阵,推出接下来的矩阵,再根据矩阵乘法构造A矩阵,对A矩阵进行快速幂,求得目标矩阵。

矩阵求逆

CSP不考?咕咕

转载于:https://www.cnblogs.com/guoyangfan/p/11626183.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

矩阵简述 的相关文章

  • PyMacroParser 宏解析工具

    PyMacroParser 宏解析工具 PyMarcoParser宏解析工具 题目要求 题目描述 示例 解题思路 1 load函数 2 preDefine函数 3 dumpDict函数 4 dump函数 关键代码 1 主要函数 2 关键函数
  • 每日一题:蒟蒻

    蒟蒻 题目 Daimayuan Online Judge map可以一一映射 按键值从小到大排序 AC代码 include
  • 多线程大串讲之一:CreateThread的学习

    function CreateThread lpThreadAttributes Pointer 安全设置 dwStackSize DWORD 堆栈大小 lpStartAddress TFNThreadStartRoutine 入口函数 l
  • unity 编辑模式下运行代码和OnEnable的使用

    AudioListener inspector的代码运行 inspector页面的脚本右上角三个小点 点击右键 选择自己写的函数名 就可以运行 相应的程序了 重点 ContextMenu SetPos ContextMenu SetPos
  • 总结一下使用过的几类LCD屏特点

    1 MCU屏 一般MCU屏都会自带显存 接口为16位的80并口 相当于支持RGB565模式 8080是通过 读使能 RE 和 写使能 WE 两条控制线进行读写操作 关键管脚说明 RESET脚 复位LCD RS 寄存器选择 置1为写数据 置0
  • ios播放gif图片

    以前一直听说ios不可以播放gif图片 也没取看看 其实想想有啥不能播放的 只是没有提供现成的api而已 最近看看资料以及别人的例子了解了一下实现原理 特记录一下 gif 其实本来就是一系列的图片的集合 可以通过 imageIO 获取到图片
  • 如何配置 vscode 识别@文件路径

    在前端开发项目中常常会使用 别名 但是在vscode中默认是不识别的 可以使用下面的配置让vscode 识别 文件路径 以便支持 ctrl 左键 点击跳转 方式一 项目配置 在项目根目录创建 jsconfig json 文件 文件内容 co
  • 一文讲清数据集市、数据湖、数据网格、数据编织

    本文介绍数据仓库 数据集市 数据湖 数据网格和数据编织相关概念和使用案例 帮助你选择并利用好数据的力量来完成明智的决策 微信搜索关注 Java学研大本营 在今天的数字时代 企业每天都在应对来自四面八方的海量数据 随着对强大的数据管理和分析需
  • 基于51单片机的无线防盗报警器

    硬件设计 无线多路防盗报警器由l台接收机和多台发射机组成 接收机可以接收多台发射机 其频率都是一样的 只是编码脉冲不同 发来的报警信号 并且加以区别 进行译码然后以数字显示的形式将这些台发射机识别出来 同时音响报警 多路无线防盗报警器主要是
  • 非对称加密及案例

    1 概述 对称加密算法在加密和解密时使用的是同一个密钥 为了解决信息公开传送和密钥管理的问题 于是提出了一种新的密钥交换协议 这种协议允许在不安全的媒体上的通讯双方交换信息 安全地达成一致的密钥系统 这就是非对称加密 公钥加密 之所以称为非
  • 如何解决uniapp加载登录页时,却先跳转首页再跳转登录页的问题

    在使用uniapp开发APP的时候 很多时候需要用到自动登录功能 由于uniapp默认显示的第一页是在pages json中设置的第一项 如果我们将登录页设置为pages json中第一项的话 在自动登录首页的时候会从登录页一闪而过 如果设
  • 039. (9.12) 数模国赛C题 中小微企业的信贷决策 第三题思考

    C 中小微企业的信贷决策 第三题思考 思考 查阅 特征工程改进 模型改动方面 企业的生产经营和经济效益可能会受到一些突发因素影响 而且突发因素往往对不同行业 不同类别的企业会有不同的影响 思考 正则化提取打标签 类别太多 难分 如果要用这种
  • oracleBLOCK(数据块)

    11 4 BLOCK 数据块 11 4 1 BLOCK 数据块 的特点 BLOCK是Oracle进行存储空间IO操作的最小单位 BLOCK的管理方法是区的管理和段管理的具体体现 1 自动管理方式 如创建表空间时区为本地管理方式 并且将段的存
  • shape和resize对应的高(height)和宽(weight)的顺序

    无论是pytorch还是opencv 都有对应的成员变量shape以及函数resize 其对应的高 height 和宽 weight 的顺序是不一样的 使用opencv举一个例子 import cv2 img cv2 imread 1 jp
  • linux shell 获取某个时间段内的文件

    shell脚本里 我们主要用find命令来搜索某类文件 所以在这里 我们也用find来查找时间段内的文件 主要方法有两种 一 使用mtime来搜索 这类方法只能精确到天数 但是一般的需求 也并不需求那么精确的时间 所以还是可以满足大部分需求
  • 自己生成AIX bff打包安装文件

    复杂度3 5 机密度4 5 最后更新2021 04 28 AIX提供了生成打包文件的命令 mkinstallp 需要安装bos adt insttools fileset 查看fileset是否已经安装 lslpp L bos adt in
  • 秒转时分秒 js

    一 方法一 http jingyan baidu com article 375c8e19a0413925f2a229d2 html
  • 高效的使用top

    为什么80 的码农都做不了架构师 gt gt gt 对桌面用户来说 监视系统资源使用是一项重要的工作 通过这项工作 我们可以找到系统瓶颈所在 针对性的进行系统优化 识别内存泄露等 问题是 我们应该用什么软件 以及如果针对我们的需求使用它 在
  • Jedis使用教程详解

    目录 一 前言 二 基本使用 三 Jedis连接池 四 连接池参数 五 哨兵模式 六 集群模式 七 Springboot当中使用Jedis 八 Springboot源码分析 一 前言 Jedis是Redis的一款Java语言的开源客户端连接
  • 分库分表实战(10):新的挑战 — 千万级数据优化之垂直拆分

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 前 言 读写分离方案上线后 订单sql查询时间再一次稳定在了300ms以下 此时对数据的增删改操作会走主库 而读请求会走从库 通过读写分离大大提升了数据读的处理能力

随机推荐

  • vue顶部菜单加左侧菜单_vue动态路由+侧边栏菜单之侧边栏菜单

    直接放我侧边栏组件代码 相关代码在vue动态路由 侧边栏菜单之动态路由 参考略作修改即可 新建目录Sidebar Sidebar gt index vue background color 304156 text color fff act
  • 阿里工程师修养之:技术三板斧:关于技术规划、管理、架构的思考的概述

    技术三板斧 前言 一 关于技术规划三板斧 二 关于技术管理三板斧 三 关于技术架构三板斧 四 关于赛车 赛道 赛手三段论 五 关于点线面体的思考 前言 实践需要理论的指导 理论从实践中来 作为技术工程师 要不断地从事件中反思经验 总结规律
  • sqldeveloper安装

    1 安装 下载地址 解压之后 运行目录下面的文件即可 运行界面如下 sqldeveloper是基于jdbc的 所以需要创建连接 打开SQL工作表 工具 gt SQL工作表 或者使用快捷键Alt F10 选择连接 2 连接Oracle数据库及
  • xshell 7使用密钥证书登录CentOS 7.9

    xshell 7证书登录CentOS 1 打开xshell 点击 文件 新建 2 连接成功后点击 工具 用户密钥管理者 点击 生成 密钥类型默认RSA 然后下一步 生成密钥后点击属性 然后把密钥复制下来 也可保存为文件 此时回到系统用户目录
  • Linux Host is not allowed to connect to this MySQL server解决方法

    先说说这个错误 其实就是我们的MySQL不允许远程登录 所以远程登录失败了 解决方法如下 在装有MySQL的机器上登录MySQL mysql u root p密码 执行use mysql 执行update user set host whe
  • Java教程(JAVA、分布式、微服务)

    Java语言教程 http www codingdict com tutorials Java教程 http www runoob com java java multithreading html Spring Cloud教程 http
  • java设计模式--[行为模式]--状态模式[state pattern]

    一 狀態模式 允許一個對象在其內部狀態改變時改變它的行為 這個對象看起來似乎修改了它的類 看起來 狀態模式好像是神通廣大 居然可以修改自身的類 二 狀態模式包括三個角色 1 環境 環境是一個類 該類含有抽象狀態聲明的變量 可以引用任何具體狀
  • 电脑正常登录QQ微信,但浏览器无法打开网页,这个你一定要学会!

    电脑能正常登录微信 QQ 但是浏览器无法打开网页的情况时有发生 掌握这三个方法 就能轻松解决问题 NO 01 检查电脑DNS是否正常 首先按Win R 输入CMD 回车 输入ping baidu com 回车 网络正常情况有回复 有 来自x
  • element table组件实现保留横向滚动条,去除纵向滚动条

    实现仅去除纵向滚动条效果 项目开发中 有这样一个需求 实现表格内容自动滚动 去掉纵向滚动条 代码如下所示 v deep webkit scrollbar width 0 height 0 这种写法确实实现了去掉了纵向滚动条的效果 不过对于我
  • 华为OD机试真题(Java),根据员工出勤信息,判断本次是否能获得出勤奖(100%通过+复盘思路)

    一 题目描述 公司用一个字符串来标识员工的出勤信息 absent 缺勤 late 迟到 leaveearly 早退 present 正常上班 现需根据员工出勤信息 判断本次是否能获得出勤奖 能获得出勤奖的条件如下 缺勤不超过1次 没有连续的
  • 活动安排算法

    问题描述 设有n个活动 每个活动要求使用统一资源 每个活动i都有起始时间s和一个结束时间f 活动1执行完成后活动2也可以完全执行 则活动1与活动2相容 活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合 活动结束时间以升序排列 算
  • 面试官:说说常见的排序算法有哪些?区别?

    一 是什么 排序是程序开发中非常常见的操作 对一组任意的数据元素经过排序操作后 就可以把他们变成一组一定规则排序的有序序列 排序算法属于算法中的一种 而且是覆盖范围极小的一种 彻底掌握排序算法对程序开发是有很大的帮助的 对于排序算法的好坏衡
  • shell编程-case语句中遇到问题

    bin bash echo Hit a key then hit return read Keypress case Keypress in A Z echo Uppercase letter a z echo Lowercase lett
  • 设置QLineEidt部件输入时自动切换到英文输入法(无法输入中文)

    在输入密码时会通过输入法显示密码 只需设置一下LineEdit部件属性即可 setAttribute Qt WA InputMethodEnabled false 设置账号输入框点击时无法输入中文 使用ui的QLineEdit对象名调用 如
  • 基于SpringBoot开源项目JeeSite的持续交互介绍

    一 实战项目介绍 JeeSite 基于Spring Boot 2 0 数据存储MySQL 语言 Java 规模大小 适中 适合初学者 源码地址 https gitee com thinkgem jeesite4 本次项目演练地址 https
  • Deepin20-R7000开启显示器扩展

    联想R7000的Deepin20系统开启显示器扩展 深度论坛里我的问题贴 基本信息 机器配置 联想拯救者R7000 2020 CPU AMD R7 4800h 独显 NVIDIA 1650 出现的问题 系统安装时勾选了闭源的NVIDIA驱动
  • Qt开发记录5——Qt错误提示系列

    目录 Qt错误提示 1 multiple definition of MainWindow MainWindow QWidget 2 error invalid use of incomplete type class Ui MainWin
  • 开始学习鸟哥的Linux私房菜-基础篇(第五章)

    现在开始学习鸟哥的Linux私房菜基础篇 下面结合自己专业的学习和对这本书的理解 我从第五章开始学习 下面是我做的笔记 5 1 使用者与群组 分清用户 用户组与其他人 下面是文件的权限和对文件权限的修改 Linux文件权限概念 在Linux
  • Java-1.10

    题目描述 假设一个人45分30秒跑了14千米 编写程序 显示他以每小时多少英里为单位的平均速度 1英里约等于1 6千米 代码 public class Speed public static void main String args do
  • 矩阵简述

    矩阵加法 C ij A ij B ij 矩阵数乘 将该数与每一个元素相乘 矩阵乘法 设A大小为n m B大小为m p 则A和B的乘积得到的矩阵大小为n p 其中每一项 AB ij sum k 1 m A ik B kj 矩阵乘法不满足交换律