矩阵快速幂

简介

矩阵快速幂是一种高效计算矩阵幂的方法。它利用了矩阵的幂运算具有分治性质的特点,可以将矩阵的幂运算时间复杂度从 O(n)降低到 O(logn)。可用于解决线性递推式问题。


经典的斐波那契数列fn=fn-1+fn-2。当n很大时,你无法快速的计算第n项的值。可以构造矩阵

F_{n}=\begin{pmatrix} f_{n} &f_{n+1} \end{pmatrix} ,F_{n+1}=\begin{pmatrix} f_{n+1} &f_{n+2} \end{pmatrix}   A=\begin{pmatrix} 0 & 1\\ 1& 1 \end{pmatrix}

\begin{pmatrix} f_{n} & f_{n+1} \end{pmatrix} *\begin{pmatrix} 0 &1 \\ 1& 1 \end{pmatrix}=\begin{pmatrix} f_{n+1} & f_{n+2} \end{pmatrix}

F_{n+1}=F_{n}*A F_{n}=F_{1}*A^{n-1}

通过矩阵快速幂得到Fn矩阵 a(0,0) 即为 fn 

Code

struct matrix 
{ll mat[2][2];void init() {memset(mat,0,sizeof mat);}
};
matrix mul(matrix a,matrix b)
{matrix c;c.init();for(int i=0;i<2;i++) {for(int j=0;j<2;j++) {for(int k=0;k<2;k++) {c.mat[i][j]+=(a.mat[i][k]%mod)*(b.mat[k][j]%mod)%mod;c.mat[i][j]%=mod;}}}return c;     
}
matrix ksm(matrix a,ll n)
{matrix b;b.init();for(int i=0;i<2;i++) b.mat[i][i]=1;   //单位矩阵while(n){if(n&1) b=mul(b,a);a=mul(a,a);n>>=1;}return b;
}

对于更加复杂的递推式,应灵活构造矩阵来解决

题目

1.求斐波那契数列前n项和

有如下递推式 Fn=Fn-1+Fn-2  Sn=Sn-1+Fn 

构造矩阵

F_{n}=\begin{pmatrix} f_{n} &f_{n+1} &S_{n} \end{pmatrix} F_{n+1}=\begin{pmatrix} f_{n+1} &f_{n+2} &S_{n+1} \end{pmatrix}

A=\begin{pmatrix} 0& 1 & 0\\ 1& 1& 1\\ 0 & 0& 1 \end{pmatrix}

F_{n+1}=F_{n}*A

2.佳佳的斐波那契

链接:https://www.acwing.com/problem/content/1306/

  

 F_{n}=\begin{pmatrix} f_{n} &f_{n+1} & S_{n+1} &G_{n} \end{pmatrix} F_{n+1}=\begin{pmatrix} f_{n+1} &f_{n+2} &S_{n+2} &G_{n+1} \end{pmatrix}

A=\begin{pmatrix} 0 & 1& 0 & 0\\ 1& 1& 1& 0\\ 0& 0& 1& 1\\ 0& 0& 0& 1 \end{pmatrix}

F_{n+1}=F_{n}*A

附上之前写过的一道矩阵快速幂的题,其实看见题目范围大概就能猜出做法了

强(矩阵快速幂)_Cambrain_的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/74875.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RedisInsight】连入Docker容器可视化redis服务

文章目录 下载安装RedisInsight添加数据库添加docker容器内的redis数据库 下载安装RedisInsight 进入redis官网下载&#xff1a;https://redis.com/redis-enterprise/redis-insight/&#xff0c;安装过程一路Next即可。 打开桌面上的快捷方式启动&#xff1a;RedisInsight-v2…

MySQL多版本并发控制

1. 什么是MVCC MVCC(Multiversion Concyrrency Contril)&#xff0c;多版本并发控制。顾名思义&#xff0c;MVCC是通过数据行的多个版本来管理实现数据库的 并发控制。这项技术使得在innodb的事务隔离级别下执行 一致性读 操作有了保证。换言之&#xff0c;就是为了查询一些正在…

Docker Compose 安装与使用(常用指令)

一、简介 Docker Compose 是一个编排多容器分布式部署的工具&#xff0c;提供命令集管理容器化应用的完整开发周期&#xff0c;包括服务构建、启动和停止。使用步骤&#xff1a;1. 利用 Dockerfile 定义运行环境镜像 2. 使用 docker-compose.yml 家义组成应用的各服务 3. 运行 …

驾校理论课模拟考试系统

驾校理论课模拟考试系统 工具 Git Npm Lombok CI/CD 具体部署流程看/ServerDeploy/服务器部署流程.txt Jenkins Docker 持续集成 技术栈 1.后端&#xff1a; ​ 权限控制&#xff1a;SpringSecurity JWT ​ Ioc框架&#xff1a;SpringBoot ​ 持久层&#xff1a;My…

NO4 实验四:生成Web工程

1、说明 使用 mvn archetype&#xff1a;generate 命令生成 Web 工程时&#xff0c;需要使用一个专门的 archetype。这个专门生成 Web 工程骨架的 archetype 可以参照官网看到它的用法&#xff1a; 2、操作 注意&#xff1a;如果在上一个工程的目录下执行 mvn archetype&…

新手指南:流程图中各种图形的含义及用法解析

我们经常在技术设计、沟通、业务演示等一些领域看到流程图&#xff0c;它也可以称为输入输出图。顾名思义&#xff0c;它是指一种简单的工作流程的具体步骤&#xff0c;比如包括一次会议的流程&#xff0c;以及一次生产制造的顺序和过程等。本文将为大家介绍流程图的含义和具体…

Coremail中睿天下|2023年第二季度企业邮箱安全态势观察

7月24日&#xff0c;Coremail邮件安全联合中睿天下发布《2023第二季度企业邮箱安全性研究报告》&#xff0c;对2023第二季度和2023上半年的企业邮箱的安全风险进行了分析。 一、垃圾邮件同比下降16.38% 根据Coremail邮件安全人工智能实验室&#xff08;以下简称AI实验室&#…

Flutter 实现按位置大小比例布局的控件

文章目录 前言一、如何实现&#xff1f;1、数值转成分数2、RowFlexible布局横向3、ColumnFlexible布局纵向 二、完整代码三、使用示例1、基本用法2、四分屏3、六分屏4、八分屏5、九分屏6、414分屏 总结 前言 做视频监控项目时需要需要展示多分屏&#xff0c;比如2x2、3x3、414…

性能优化点

Arts and Sciences - Computer Science | myUSF 索引3层&#xff08;高度为3&#xff09;一般对于数据库地址千万级别的表 大于2000万的数据进行分库分表存储 JVM整体结构及内存模型 JVM调优&#xff1a;主要为减少FULL GC的执行次数或者减少FULL GC执行时间 Spring Boot程序…

微信小程序:点击按钮实现数据加载(带模糊查询)

效果图 代码 wxml: <!-- 搜索框--> <form action"" bindsubmit"search_all_productiond"><view class"search_position"><view class"search"><view class"search_left">工单号:</view…

分类预测 | MATLAB实现WOA鲸鱼算法同步优化特征选择结合支持向量机分类预测

分类预测 | MATLAB实现WOA鲸鱼算法同步优化特征选择结合支持向量机分类预测 目录 分类预测 | MATLAB实现WOA鲸鱼算法同步优化特征选择结合支持向量机分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现WOA鲸鱼算法同步优化特征选择结合支持向量机分类预测…

【Java Web基础】mvn命令、Maven的安装与配置

本文极大程度上来自Maven安装(超详解)&#xff0c;但是担心安的过程中遇到什么不一样的问题&#xff0c;顺便加深印象&#xff0c;所以还是打算自己弄一篇。 目录 第一步&#xff1a;Download Maven第二步&#xff1a;解压与安装2.1 解压2.2 安装 第一步&#xff1a;Download …

不需要C盘清理软件,这样清理c盘也很有效!

“救命&#xff01;电脑c盘又红了&#xff01;感觉每次用电脑都在清理c盘&#xff0c;已经累了&#xff0c;大家有什么比较好的c盘清理软件或者方法可以给我推荐推荐吗&#xff1f;” 电脑的c盘为我们保存了很多重要的文件和系统资料。因此&#xff0c;我们可能会发现&#xff…

无涯教程-Lua - for语句函数

for 循环是一种重复控制结构&#xff0c;可让您有效地编写需要执行特定次数的循环。 for loop - 语法 Lua编程语言中 for 循环的语法如下- for init,max/min value, increment dostatement(s) end 这是 for 循环中的控制流程- 首先执行 init 步骤&#xff0c;并且仅执行一…

网络安全漏洞(风险)扫描类型

漏洞&#xff08;风险&#xff09;扫描是保障现代企业数字化转型安全开展过程中一个至关重要的组成部分&#xff0c;可以帮助企业识别数字化系统和应用中的各类安全缺陷。在实际应用时&#xff0c;漏洞扫描的类型需要和它们能够保护的IT环境保持一致。如果充分了解不同类型漏洞…

QT中使用ffmpeg的api进行视频的播放

在了解ffmpeg使用api进行视频的播放之前&#xff0c;我们首先了解一下视频的播放流程。 一、视频的播放流程 首先是我们最常见的视频文件&#xff0c;在播放流程中首先是要打开视频文件&#xff0c;将视频文件中的数据进行解封装&#xff0c;之后再将解封装之后的视频进行解码…

单片机中的通用LED驱动

前言 项目中需要用到很多的LED灯&#xff0c;存在不同的闪烁方式&#xff0c;比如单闪&#xff0c;双闪&#xff0c;快闪&#xff0c;慢闪等等&#xff0c;我需要一个有如下特性的LED驱动 方便的增加不同闪烁模式可以切换闪烁模式增加LED数目不会有太多的改动方便移植&#x…

Stable Diffusion 硬核生存指南:WebUI 中的 VAE

本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议&#xff0c;欢迎转载、或重新修改使用&#xff0c;但需要注明来源。 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2023年07月30日 统计字数: 11485字 阅读时间: 23分钟阅读 本文链接: https://soulteary.com/2023/07…

MySQL实用命令

一、 DISTINCT 去重 案例&#xff1a;user_test表对班级字段进行去重操作 SELECT DISTINCT class FROM user_test 二、 的作用 案例&#xff1a; SELECT NULL10 三、 concat 实现连接字符串 ​​​案例&#xff1a; SELECT CONCAT(NAME,class) AS 姓名班级 FROM user_test 四…

【多模态】23、RO-ViT | 基于 Transformer 的开发词汇目标检测(CVPR2023)

文章目录 一、背景二、方法2.1 基础内容2.2 Region-aware Image-text Pretraining2.3 Open-vocabulary Detector Finetuning 三、效果3.1 细节3.2 开放词汇目标检测效果3.3 Image-text retrieval3.4 Transfer object detection3.5 消融实验 论文&#xff1a;Region-Aware Pretr…