首页 > 其他分享 >矩阵乘法学习笔记

矩阵乘法学习笔记

时间:2024-04-06 19:58:54浏览次数:29  
标签:begin end 矩阵 笔记 textbf 斐波 bmatrix 乘法

可以用来加速 dp,解决值域大的问题。

$ \text{Examples:} $

P1962 斐波那契数列

和某个入门题很像,但值域扩大到了 $ [1, 2^{63}) $ ,当然不能暴力求解,考虑把 $ f_{n} $ 和 $ f_{n - 1} $ 当成向量写在一起:\(\begin{bmatrix} f_{n} \\ f_{n - 1} \end{bmatrix}\),然后找出使下列等式成立的矩阵 $ \textbf{A} $:

\[\begin{bmatrix} f_{n} \\ f_{n - 1} \end{bmatrix} = \textbf{A}\begin{bmatrix} f_{n - 1} \\ f_{n - 2} \end{bmatrix} \]

容易得出:$ \textbf{A}$ \(= \begin{bmatrix} 1 & 1 \\\ 1 & 0\end{bmatrix}\)。那么,乘上 $ n - 2 $ 次 $ \textbf{A} $ 后就是这样的:

\[\begin{bmatrix} f_{n} \\ f_{n - 1} \end{bmatrix} = \textbf{A}^{n - 2}\begin{bmatrix} f_{2} \\ f_{1} \end{bmatrix} \]

如何计算 $ \textbf{A}^{n - 2} $呢?考虑快速幂:开一个结构体Matrix并重载*运算符,写一个矩阵的快速幂。

P1349 广义斐波那契数列

与上一题相同,类比得到:

\[\begin{bmatrix} a_{n} \\ a_{n - 1} \end{bmatrix} = \textbf{A}^{n - 2}\begin{bmatrix} a_{2} \\ a_{1} \end{bmatrix} \]

\[\textbf{A} = \begin{bmatrix} p & q \\ 1 & 0 \end{bmatrix} \]

P1939 矩阵加速

这题的递推式有些奇怪,但不影响我们推,所以考虑开一个四维向量,如下:

\[\begin{bmatrix} f_{x} \\ f_{x - 1} \\ f_{x - 2} \\ f_{x - 3} \end{bmatrix} = \textbf{A}^{x - 4}\begin{bmatrix} f_4 \\ f_3 \\ f_2 \\ f_1 \end{bmatrix} \]

再将 $ f_x $ 代换成 $ f_{x - 1} + f_{x - 3} $,解出:

\[\textbf{A} = \begin{bmatrix} 1 & 0 & 1 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \]

标签:begin,end,矩阵,笔记,textbf,斐波,bmatrix,乘法
From: https://www.cnblogs.com/CusetNekomusume/p/18117817

相关文章

  • c++算法学习笔记 (20) 哈希表
    1.模拟散列表//拉链法#include<bits/stdc++.h>usingnamespacestd;constintN=100003;inth[N];inte[N],ne[N],idx;//存链voidinsert(intx){intk=(x%N+N)%N;//让负数的余数变成正数(若直接加N,则可能溢出)e[idx]=x;ne[idx]......
  • c++算法学习笔记 (21) STL
    1.vector:        变长数组,倍增的思想        size()返回元素个数        empty()返回是否为空        clear()清空        front()/back()元素        push_back()/pop_back()        begin()/end()迭代器 ......
  • c++算法学习笔记 (19) 堆
    1.堆排序:(1)插入一个数:heap[++size]=x;up(size);//在最后插入,再往上移(2)求集合中最小值:heap[1](3)删除最小值:swap(heap[1],heap[size]);size--;down(1);//将最小值移到最后直接删除,再将heap[1]下移到合适位置(4)删除任意一个元素:swap(heap[k],heap[size]);size--;down(1)orup(1);/......
  • 毅四捕Go设计模式笔记——桥接模式
    桥接模式(BridgePattern)桥接模式是一种结构型设计模式,它的主要目的是将抽象部分与它的实现部分解耦,使它们都可以独立的变化。通过使用组合而非继承的方式,桥接模式结合了两个独立的维度,让它们可以独立扩展而不是在两者之间建立静态的继承关系。为了解决什么问题?桥接模式解......
  • Lustre架构介绍的阅读笔记-基础知识
    本文是在阅读IntroductiontoLustre*Architecture的如下章节时的笔记。Lustre–Fast,ScalableStorageforHPCLustreScalableStorageLustreBuildingBlocksLustreStorageScalabilityLustresoftwareservicesareimplementedentirelywithintheLinuxkerne......
  • 2024.4.6练习笔记
    浙江理工大学2024年程序设计竞赛(同步赛)Fleetcode题目要求:求出一个序列中对于每个位置\(i\),以\(i\)为起点第一个\(\text{leetcode}\)子序列的终止位置。需要注意的是不要求子序列连续。不存在则答案为零。容易想到双指针,但是会TLE,考虑一些优化。扫描序列,字母是属于......
  • 【Qt 学习笔记】详解Qt中的信号和槽
    博客主页:DuckBro博客主页系列专栏:Qt专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞......
  • 机器学习和深度学习--李宏毅 (笔记与个人理解)Day7
    Day7RegressionCasestudy(预测宝可梦的cp)Regression可以做什么?股票预测自动驾驶推荐预测宝可梦的cp(能力类似这样的属性把)这里突然想到,是不是可以用洛克王国和赛尔号做事情哈哈注意:用下标来表示某一个完整的物体的某一个部分,例如:x表示妙蛙种子;那么xhp就表示......
  • 二十七 205. 斐波那契 (矩阵乘法|快速幂)
    205.斐波那契(矩阵乘法|快速幂)对矩阵和矩阵快速幂的讲解importjava.util.*;publicclassMain{privatestaticfinalintmod=10000;privatestaticint[][]mul(int[][]a,int[][]b){int[][]c={{0,0},{0,0}};for(inti......
  • 24.4.5C语言学习笔记|访问空间地址【之前一直迷惑的问题】
    1、如何访问一个空间?有名访问无名访问指针的大小跟你的编译器是x64系统还是x86系统有关,%p,打印地址(十六进制)C语言如何用地址来描述一个空间?C语言如何识别变量的属性?定位,先右看,再左看数组:有多少个?每一个怎么存的?高级变形第二个:定位---a5【一个指针,地址,门牌号】怎么访......