首页 > 其他分享 >矩阵法

矩阵法

时间:2024-08-14 11:17:26浏览次数:12  
标签:int 矩阵 相乘 行数 列数 对应

快速幂


 

 

  第1题     快速幂 查看测评数据信息

求a的n次幂,答案模1000000007。

输入格式

 

一行,两个整数,a和n。1<=a<=1000,  1<=n<=1000000000。

 

输出格式

 

一个整数

 

输入/输出例子1

输入:

2 4

 

输出:

16

 

样例解释

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int Mod=1000000007;

int a, n;
int qpow(int a, int k)
{
	int res=1;
	while (k>0)
	{
		if (k&1) res=(res*a)%Mod;
		a=(a*a)%Mod;
		k>>=1;
	}
	return res;
}
signed main()
{
	scanf("%lld%lld", &a, &n);
	printf("%lld", qpow(a, n));
	return 0;
}

 

比较简单,就是注意拆二进制拆的是k

快速幂递归的写法会超时,以后都用进制拆分的做!

 

重载运算符


 

 矩阵快速幂


 

 

 

一些常识


 

矩阵一般用大写字母表示,矩阵的元素用大括号括住,例如:

 

 

 

矩阵快速幂用途


 

1.加速递推
2.矩阵的多少多少次方在图论的一个含义

 

 

矩阵加减法


 

前提:行列相等

规则:对应运算加减,例如:

 由于减法是加法的逆运算,也支持交换律和结合律

 

数乘


 

重点-矩阵快速幂


 

矩阵乘法


 

假设,矩阵A*矩阵B=矩阵C

进行矩阵乘法的前提条件:A的列数=B的行数(这里后面会解释为什么)

有一个规律,C的行数:A的行数, C的列数:B的列数,我们可以最后再回来看为什么,先往下看

 

计算规则:

矩阵A的第i行和矩阵B的第j列相乘(对应元素相乘后相加),所得的结果放在矩阵C的第i行第j列

可能直接看有点生硬,我们画个图理解下。A矩阵有大小是2*2,B矩阵大小是1*2,根据计算规则

A的第1行 * B的第1列,我们要对应元素相乘,也就是每个数依次相乘

就是{1, 2} * {5, 6},1对应5,2对应6,对应元素相乘后相加,那么就是,1*5+2*6=17,那么C矩阵的第1行第1列的数是17

 

A的第2行 * B的第1列,{3, 4} * {5,6},3*5+4*6=39,那么C矩阵第1行第2列的是是39

这个时候,如果你理解的过程,你就会发现,A的行数必须=B的列数,那么才可以计算,不然无法让元素对应上,所以这就是矩阵乘法的规则

我们再观察C的行数,由于A每行乘B每列,会在C每行形成一个数

例如,A的第1行 * B的第1列,会在C第1行形成一个数

那么一般情况,A的第n行 * B的第x列,会在C第n行形成一个数,所以影响C的行数的是A矩阵它有多少行,也就是A的行数

 

我们再观察C的列数,由于A每行乘B每列,会在C每列形成一个数

例如,A的第1行 * B的第1列,会在C第1列形成一个数

如果我们用  A的第2行 * B的第1列,还是会在在C第1列形成一个数

那么一般情况,A的第x行 * B的第n列,会在C第n列形成一个数

所以C的列数与A的行数无关,只与B的列数有关,也就是B有多少列,C就有多少列

 

所以说,C的行数:A的行数, C的列数:B的列数

其实这个例子不是特别好,因为列只有1列,你可以试试A矩阵为2*2,B矩阵也为2*2的情况!

 

伪代码:
for (i~n) 遍历A的行,假设有n行
    for (j~m) 遍历B的列,假设有m列
        for (k~p) 遍历A的列,假设有p列
            c[i][j]+=a[i][k]*b[k][j]

看懂后,这代码应该就显而易见了,由于计算C矩阵的值并不能O(1)算,要每一个元素对应每一个元素,所以得开k这个循环

时间复杂度:O(n^3)

 

标签:int,矩阵,相乘,行数,列数,对应
From: https://www.cnblogs.com/didiao233/p/18358508

相关文章

  • SciTech-BigDataAIML-LLM-Transformer Series系列: Word Embedding词嵌入详解: 用Corp
    SciTech-BigDataAIML-LLM-TransformerSeries系列:WordEmbedding词嵌入详解:1.用Corpus预训练出嵌入矩阵\(\largeE\)CorpusCollecting:非常重要的工作先收集一个常用的Corpus(语料库),能保障大多数的word都在corpus.有两个特别重要的作用:VocabularyExtracting:词......
  • 智能汽车技能矩阵(1)——从系统到领域
    智能汽车技能矩阵(1)——从系统到领域从业智能汽车需要具备什么技能?聚焦这个问题准备开启一个新的系列,即所谓的“技能矩阵”——SkillMatrix。附赠自动驾驶最全的学习资料和量产经验:链接插件概念ASPICE3.1图示中的插件概念,如下图。来自ASPICE3.1如上图,产品分解为不......
  • 抖音矩阵系统源码搭建,矩阵系统贴牌,矩阵工具开源
    在当今的社交媒体时代,抖音的影响力日益增强。对于许多开发者和企业来说,搭建一个抖音矩阵系统源码具有重要的战略意义。本文将为您详细介绍抖音矩阵系统源码搭建的全过程。今天,抖去推矩阵系统通过为商家提供矩阵管理、内容创作、视频生产、数据统计、等一站式SaaS解决方案。解......
  • 微信小程序版矩阵系统源码搭建,一部手机就可以矩阵运营
    流量平均化的时代已经到来,这是普通老板最好的逆袭机会。不要再问怎么做流量了,粉丝数量越多,变现可能越难,因为你的粉丝人群并不精准,也不够垂直。其实实体店方法很简单,不用老板出镜当网红,也不用绞尽脑汁写文案,内容呢,就围绕产品去拍,工厂或门店环境、客户评价去拍,固定一个爆款框......
  • 算法学习:矩阵快速幂/矩阵加速
    1.前言 其实本质上来说,矩阵快速幂或是矩阵加速的题目比较的模板化一些,大体上都是属于我们要先写出来一个递推式子(或者是我们需要递推的式子),然后由于递推的次数过大,1e18之类的,会导致复杂度的飚升,所以我们会用到矩阵来帮我们快速处理。 另外,从题目的类型上大概是分为两类,一类是......
  • 最大子矩阵(C/C++)
    简介:最大子矩阵问题是指在一个矩阵中找到一个子矩阵,使得该子矩阵的元素之和最大。解决该问题的常用方法是使用动态规划。先计算出每一行的前缀和,然后对于每一列的起始和终止位置,计算出该区域内每一行的和,得到一个一维数组。再对该一维数组使用动态规划求解最大子数组和的问题......
  • 在Power BI表或矩阵中创建迷你图
    第一部分:什么是迷你图?PowerBI目前已支持在表或矩阵添加迷你图(迷你图功能目前为预览版)。迷你图可以方便用户快速查看和比较趋势,同时可以突出显示最大值和最小值等等,非常实用。样例图: 前期准备:开启迷你图功能默认情况下,迷你图应是开启的状态。由于大家使用PowerBIDesktop......
  • 预训练的 Word2Vec 向量来初始化词嵌入矩阵
    使用预训练的Word2Vec向量来初始化词嵌入矩阵的过程涉及以下几个步骤:1.下载预训练的Word2Vec向量获取模型:预训练的Word2Vec向量通常可以从模型发布者的官方网站或开源平台下载。例如,Google提供了大规模的预训练Word2Vec向量。文件格式:预训练的Word2Vec向量一......
  • 怎么用云手机进行TikTok矩阵运营
    TikTok作为炙手可热的社交媒体巨头,已经吸引了亿万用户的目光。随着科技的飞速发展,云手机的出现为TikTok矩阵运营注入了新的活力。本文将深入探讨云手机在TikTok矩阵运营中的实际应用,并分享一系列高效策略与技巧。(1)提供多账号管理:首先,云手机凭借虚拟化技术,实现了对多个TikTok......
  • openvslam 优化误差问题 随机一致性 核函数 信息矩阵(高斯牛顿)
     优化问题  我们的目标就是找到一组a,b,λa,b,\lambdaa,b,λ的解,使得式(1)整体值最小,也就是各个点到曲线的距离在y方向的和最小。 鲁棒核函数假设现在散点中一个很离谱的错误点由于右上角那个离谱的点,导致优化时将整个函数被拉偏了(可以对比图3)。那么怎么解决......