首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将两个矩阵分成8个小矩阵的快速算法

是指矩阵乘法中的Strassen算法。该算法通过将两个矩阵分解成8个子矩阵,并使用递归的方式进行计算,从而减少了乘法运算的次数,提高了计算效率。

Strassen算法的步骤如下:

  1. 将两个n×n的矩阵A和B分别划分为四个n/2×n/2的子矩阵: A = | A11 A12 | B = | B11 B12 | | | | | | A21 A22 | | B21 B22 |
  2. 计算七个中间矩阵: M1 = (A11 + A22) × (B11 + B22) M2 = (A21 + A22) × B11 M3 = A11 × (B12 - B22) M4 = A22 × (B21 - B11) M5 = (A11 + A12) × B22 M6 = (A21 - A11) × (B11 + B12) M7 = (A12 - A22) × (B21 + B22)
  3. 计算四个结果矩阵: C11 = M1 + M4 - M5 + M7 C12 = M3 + M5 C21 = M2 + M4 C22 = M1 - M2 + M3 + M6
  4. 将四个结果矩阵合并为一个n×n的矩阵C: C = | C11 C12 | | | | C21 C22 |

Strassen算法的优势在于它的时间复杂度较传统的矩阵乘法算法更低。传统的矩阵乘法算法的时间复杂度为O(n^3),而Strassen算法的时间复杂度约为O(n^log2(7)),其中log2(7)约为2.81。因此,在处理大规模矩阵乘法时,Strassen算法可以显著提高计算效率。

Strassen算法的应用场景包括图像处理、信号处理、机器学习等领域。在这些领域中,经常需要进行大规模矩阵乘法运算,而Strassen算法可以提供更高效的计算方法。

腾讯云提供了云计算相关的产品和服务,其中包括云服务器、云数据库、云存储等。具体可以参考腾讯云官方网站(https://cloud.tencent.com/)获取更详细的产品介绍和相关信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

客户端基本不用的算法系列:矩阵快速幂

回顾 在上一篇文章中,我们对快速幂算法进行了如下的分析: int qpow(int x, int n, int m) { int res = 1; while (n) {...cout << qpow(10, 3, 997) << endl; // 3 cout << qpow(10, 2, 997) << endl; // 100 return 0; } 我们的快速幂算法其实并没有真正的优化乘法效率...这两个式子结合起来,其实就是 res 不断的去累乘多个 x 。 其中的关键就是快速幂其实没有真正优化乘法的效率,而是优化了乘法运算的次数。...既然我们已经对矩阵的 matrix 的结构体做了乘法符号重载,那么我们的快速幂算法实现直接对类型做修改即可: matrix qpow(matrix x, int n) { matrix res...然后我们将 f(1) = 1 和 f(0) = 0 带入,形成 base 矩阵。

93710

斯坦福CS224W 图与机器学习5】Spectral Clustering

第五节主要介绍了谱聚类,也可用于上一节提到的社区划分,另外还扩展了基于motif的谱聚类,主要分成两个部分: 谱聚类算法 基于motif的谱聚类 谱聚类算法 Part1 问题定义 给定一个图 [agwrezouo3....svg] ,如下图所示,谱聚类就是一个bi-partition任务,希望把下图划分成两个群体A,B,让组内尽可能相似,组间差异尽可能大。....svg] ,其中 [xxj6aacwzz.svg] 是矩阵M第二小特征值, [s1jhmeexvn.svg] 为矩阵M第一小特征值对应的特征向量。...综上所述,就可以利用拉普拉斯矩阵第二小的特征值对应的特征向量来进行划分。...[xlcaox5ixa.jpeg] 通过上述三个部分,就简单解释了谱图聚类三个步骤的意义~ 再补充一些提到的其他问题: 可以证明,如果将图G划分为A和B两个部分,且 [4ku7zwiwos.svg]

1K30
  • 疯子的算法总结(五) 矩阵乘法 (矩阵快速幂)

    学过线性代数的都知道矩阵的乘法,矩阵乘法条件第为一个矩阵的行数等与第二个矩阵的列数,乘法为第一个矩阵的第一行乘以第二个矩阵的第一列的对应元素的和作为结果矩阵的第一行第一列的元素。...我们参考快速幂,将数字的乘法换成矩阵的乘法,可以得出矩阵快速幂的代码; #include using namespace std; const int MOD=1e8+5;...{ if(k &1) ans =muti(ans,a,mod); a = muti(a,a,mod); k >>=1; } return ans; } 应用:矩阵快速幂求斐波那契数列...我们定义一个矩阵A |0 1| |1 1| 定义F(0)=0,F(1)=1。 构成矩阵F矩阵|0 1| A矩阵的N次幂,乘以F矩阵的第一项就是第N个斐波那契数列。...证明: F矩阵乘以A矩阵代表将右侧元素给左侧,右侧元素等于右侧加左侧。矩阵的乘法满足结合律,所以FXX*……N……X = F (XXX……*X) 所以定义不同的F矩阵可以得到不同的斐波那契数列。

    70040

    矩阵求逆的快速算法

    矩阵求逆在3D程序中很常见,主要应用于求Billboard矩阵。...按照定义的计算方法乘法运算,严重影响了性能。在需要大量Billboard矩阵运算时,矩阵求逆的优化能极大提高性能。这里要介绍的矩阵求逆算法称为全选主元高斯-约旦法。...= k 最后,根据在全选主元过程中所记录的行、列交换的信息进行恢复,恢复的原则如下:在全选主元过程中,先交换的行(列)后进行恢复;原来的行(列)交换用列(行)交换来恢复。...原算法(经过高度优化) 新算法 加法次数 103 61 39 乘法次数 170 116 69 需要额外空间 16 * sizeof(float) 34 * sizeof(float) 25 * sizeof...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.6K10

    【算法】将单向链表按某值划分成左边小、中间相等、右边大的形式

    实现一个调整链表的函数, 将表调整为左部分都是值小于 pivot 的节点, 中间部分都是值等于pivot的节点, 右部分都是值大于 pivot的节点。...总之,满足左部分都是小于3的节点,中间部分都是等于3的节点(本例中这个部 分为空),右部分都是大于3的节点即可。对某部分内部的节点顺序不做要求。 进阶题 在原问题的要求之上再增加如下两个要求。...,其实就是快拍的partition过程,详文见https://www.jianshu.com/p/9494a3ba1555 3、将数组还原为链表 代码实现 public static Node listPartition1...- 1].next = nodeArr[i]; } nodeArr[i - 1].next = null; return nodeArr[0]; } /// 荷兰国旗算法...2、每一次遍历都更新对应区域的头尾节点 3、全部遍历节点完毕后,将连接小于的尾->等于的头->等于的尾->大于的头 代码实现 public static Node listPartition2

    1.4K20

    分治算法的介绍与原理解析

    同样也是分成了"分"和"治": 分:递归地将原数组划分为两个子数组(子问题),直到子数组只剩一个元素(最小子问题) 治:从底到顶地将有序子数组进行合并,从而得到有序地原数组 1.1 如何判断分治问题...在排序算法中,快速排序、归并排序、堆排序相比较于选择排序、冒泡排序、插入排序更快,就是因为它们应用了分治的策略。 提问:为什么分治可以提升算法效率,它的底层逻辑是什么?...1.3 分治常见应用 寻找最近点对:该算法首先将点集分成两部分,然后分别找出两部分中最近的点对,最后找出跨越两部分的最近点对。...大整数乘法:例如Karastsuba算法,它将大整数乘法分解为几个较小的整数的乘法和加法。 矩阵乘法:例如Strassen算法,它将大矩阵分解为多个小矩阵的乘法和加法。...归并排序:递归地将原数组划分为两个子数组,直到子数组只剩一个元素,从底到顶地将有序子数组进行合并,从而得到有序地原数组 快速排序:快速排序是选取一个基准值,然后把数字分为两个子数组,一个数组的元素比基准值小

    14110

    【数据结构与算法】图最短路径算法 ( Floyed 算法 | 图最短路径算法使用场景 | 求解图中任意两个点之间的最短路径 | 邻接矩阵存储图数据 | 弗洛伊德算法总结 )

    文章目录 一、最短路径 二、图最短路径算法使用场景 三、求解图中任意两个点之间的最短路径 四、邻接矩阵存储图数据 五、只允许经过 1 号点中转得到任意两点之间的最短路径 六、在之前的基础上-只允许经过...带权图 ; 边的 权值 可以理解为 两个结点 之间的 距离 或者 消耗时间 , 从 结点 A 到 结点 B 有不同的路径 , 将这些路径的 边 的 权值 相加 , 权值总和最小的路径 , 就是 最短路径...之间的距离 ; 四、邻接矩阵存储图数据 ---- 使用 邻接矩阵 存储 下图信息 ; 下图中 使用 二维数组 int[][] edge 存储邻接矩阵 , 二维数组 元素的值为 两个点 之间的 边 的...权重 ; 如 : edge[1][2] 是 从 结点 1 到 结点 2 之间的 边 的权重 ; 邻接矩阵 取值 : 两个结点之间存在边 : 邻接矩阵 取值 就是这个 边 的权重 ; 两个结点之间不存在边..., 邻接矩阵 中的元素值 , 就是对应的 任意两个点 之间的最小距离 ; 八、弗洛伊德算法总结 ---- 弗洛伊德算法 可以 计算出 图中 任意两个点 的最短路径 ; 弗洛伊德算法的 时间复杂度是

    2.5K20

    推荐系统的数学模型-从矩阵分解到推荐系统(Scala实现)

    变态假面 如果我们把李雷和Jim Green分成一组,韩梅梅和Lucy分成一组,会发现同一组的成员对电影的喜好更为一致。...就好比两个好朋友互相推荐或者相约去电影院一样。唯一不同的地方就是,这里的两个人可能完全不知道对方的存在,但是通过推荐系统,我们帮助他们建立了”品味相近的朋友关系“。...接下来,我们将矩阵 R 分解成 user-feature 和 feature-item 矩阵的乘积: ✖ P :|U|✖|K|,|K| 表示 feature 的个数,元素 表示第i个user对第...比如我们将所有已经评分的 (user,item,rating) 组成一个集合T(T也是常说的训练数据 training data),我们需要的是对这个集合内的元素偏差 之和 尽可能的小。...基于以上分析,我们将偏差 e 的定义域重新现在在集合T上,由此得到偏差的表达式为: 正则化 上面的算法是分解矩阵最基础的算法。还有更多的分解方法,当然这些方法也会更复杂。

    78930

    快速傅里叶变换(FFT)算法【详解】

    快速傅里叶变换(Fast Fourier Transform)是信号处理与数据分析领域里最重要的算法之一。...FFT(快速傅里叶变换)本身就是离散傅里叶变换(Discrete Fourier Transform)的快速算法,使算法复杂度由原本的O(N^2) 变为 O(NlogN),离散傅里叶变换DFT,如同更为人熟悉的连续傅里叶变换...DFT 到 FFT: 利用对称性 Cooley 和 Tukey 证明了,DFT的计算可以分为两部分。从DFT的定义得: ? 我们将单个DFT分成了看起来相似两个更小的DFT。一个奇,一个偶。...向量化的NumPy 注意上面的递归FFT实现,在最底层的递归,我们做了N/32次的矩阵向量乘积。我们的算法会得益于将这些矩阵向量乘积化为一次性计算的矩阵-矩阵乘积。...并且Cooley-Tukey算法还能够使其分成超过两部分(正如我们这里用到的Cooley-Tukey FFT基2算法),而且,其它更为先进的FFT算法或许也可以能够得到应用,包括基于卷积的从根本上不同的方法

    5.2K90

    【算法】k均值和层次聚类

    小编邀请您,先思考: 1 聚类算法有什么应用? 2 如何做聚类? 看看下面这张图,有各种各样的虫子和蜗牛,你试试将它们分成不同的组别? 完成了吗?...鉴于人工智能和机器学习的关键就是快速理解大量输入数据,那在开发这些技术方面有什么捷径呢?在本文中,你将阅读到两种聚类算法——k-均值聚类和层次聚类,机器可以用其来快速理解大型数据集。...第一步:需要我们将这些运动员随机分成 3 组并计算每一组的均值。...更加细微的细节: 上面所描述的算法还有一些变体。最初的「种子」聚类可以通过多种方式完成。这里,我们随机将每位运动员分成了一组,然后计算该组的均值。...然后将最接近的两个观察值组为一对,并计算它们的平均值。通过将成对观察值合并成一个对象,我们生成一个新的距离矩阵。具体合并的过程即计算每一对最近观察值的均值,并填入新距离矩阵,直到所有观测值都已合并。

    1.5K100

    卷积神经网络中的Winograd快速卷积算法

    | 博客园 | CSDN 写在前面 随便翻一翻流行的推理框架(加速器),如NCNN、NNPACK等,可以看到,对于卷积层,大家不约而同地采用了Winograd快速卷积算法,该算法出自CVPR 2016...本文将尝试揭开Winograd算法的神秘面纱。...将卷积核的元素拉成一列,将输入信号每个滑动窗口中的元素拉成一行。注意图中红线划分成的分块矩阵,每个子矩阵中重复元素的位置与一维时相同,同时重复的子矩阵也和一维时相同,如下所示 ?...卷积神经网络中的Winograd 要将Winograd应用在卷积神经网络中,还需要回答下面两个问题: 上面我们仅仅是针对一个小的image tile,但是在卷积神经网络中,feature map的尺寸可能很大...第二个问题,3维卷积,相当于逐层做2维卷积,然后将每层对应位置的结果相加,下面我们会看到多个卷积核时更巧妙的做法。 这里直接贴上论文中的算法流程: ?

    2.4K40

    什么是分治法?

    在计算机科学和算法设计中,分治法是一种非常重要且常用的策略。它将一个复杂的问题分成两个或多个相对简单的子问题,递归地解决这些子问题,最后将子问题的结果合并起来,得到原问题的解。...案例一:二分查找 二分查找是一种高效的搜索算法,适用于有序数组。其基本思想是将数组逐步二分,从而快速缩小搜索范围。以下是二分查找的步骤: 分解:将数组从中间位置一分为二。...案例二:归并排序 归并排序是一种基于分治法的排序算法。它将数组分成两部分,分别排序,然后合并两个有序数组。其步骤如下: 分解:将数组分成两部分。 解决:递归地对两部分分别进行归并排序。...案例三:快速排序 快速排序也是一种基于分治法的排序算法。它通过选择一个“基准”元素,将数组分成两部分,一部分小于基准元素,另一部分大于基准元素,然后对两部分分别进行快速排序。...矩阵乘法:Strassen算法。 分治法不仅限于算法领域,在解决其他复杂问题时,也可以运用分治思想。例如,在项目管理中,可以将大型项目分解成若干小任务,分别完成后再汇总,最终完成整个项目。

    18310

    谱聚类

    定义: 谱聚类是一种基于图论的聚类算法,他的思想是将数据集转化称为无向带权图,然后将在各图划分成为两个或两个以上的最优子图,这些最优图的内部尽量相似,子图间的距离尽量远。...大致流程: 将所有数据看做图中间的点,点与点之间用边相连,距离较远的两个点权值低反之高,然后切图,切图的目标就是切图之后子图之间的距离尽量远,图内差异性尽量小(这里的差异是指点与点之间距离尽量小)。...谱聚类算法流程: input:dataset(x1,x2,...,xn) output:cluster(c1,c2,......(** 1/2)最小的k1个特征值所各自对应的特征向量f 将各自对应的特征向星f组成的矩阵按行标准化,最终组成nxk1维的特征矩阵F 对F中的每一行作为一 个k1维的样本,共个样本,用输入的聚类方法进行聚类...:就是将图G(V,E)切成相互没有连接的k个子图 那么如何切图可以让子图内的点权重和高,子图间的点权重和低呢: 先定义两个子图A和B之间的切图权重为: image.png 再定义有k个子图的切图cut

    86130

    【算法分析】分治法详解+范例+习题解答

    3.4.1合并排序 3.4.2快速排序 3.4.2.1复杂度 3.5线性时间选择算法 3.6快速排序中第k小的元素的算法 3.6.1复杂度 4.书后习题 2-4 大整数乘法的O(nm ^log(3/2...,yk); //将各子问题的解合并为原问题的解 } 1.4主定理Master Theorem 2.范例 2.1合并排序 2.1.1 基本思想 将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行排序...n3)【计算时,三个for循环】 2.3.1基本思想 为了降低时间复杂度,必须减少乘法的次数 2.3.2 复杂度分析【nlog7 =n 2.81】 2.4 大整数乘法 请设计一个有效的算法,可以进行两个...3,查找数组a[n]中的第k小的元素(k相对于n比较小); 4,查找数组a[n]中的中位数(序号为n/2); 3.2设计算法 设计算法,找出数组a[n]的中位数。...3.6快速排序中第k小的元素的算法 可基于快速排序中的划分算法Partition (int a[], int low, int high)完成查找数组a[low:high]中第k小的元素的算法,其中,

    2.8K30

    分治法(Divide-and-Conquer Algorithm)经典例子分析

    //3、这个程序只是表现了分治算法的思想,但是真正的大数还是不能计算(考虑到溢出) 03 Strassen矩阵算法 3.1 背景介绍 矩阵乘法是种极其耗时的运算。...下面介绍Strassen算法,该算法将时间复杂度降低到O(nlg7) ≈ O(n2.81)。 3.2 思路分析 Strassen算法是一种基于分治策略的改进算法,我们先来看下简单的分治算法。 ?...经计算可以看到,分治策略改进的矩阵计算并不能降低时间复杂度。要想提高算法效率,由主定理方法可知必须想办法将2中递归式中的系数8减少。Strassen算法就是基于此进行了改进。 如图所示: ? ?...对输入数组进行递归划分,与快速排序不同的是,它只对划分出的子数组之一进行递归处理,用一个随机的序列中的数作为枢纽,用快速排序算法,进行一次快排,然后将枢纽值和k值进行比较,以此来确定k值。...考虑将所给的n个点的集合S分成2个子集S1和S2,每个子集中约有n/2个点,然后在每个子集中递归地求其最接近的点对。

    3.5K31

    算法—史上最好快速幂算法讲解

    将bigsai设为星标,方便下次观看哦! 前言 快速幂是什么? 顾名思义,快速幂就是快速算底数的n次幂。 有多快? 其时间复杂度为 O(log₂n), 与朴素的O(n)相比效率有了极大的提高。...用的多么? 快速幂属于数论的范畴,本是ACM经典算法,但现在各厂对算法的要求越来越高,并且快速幂适用场景也比较多并且相比朴素方法有了非常大的提高。所以掌握快速幂算法已经是一名更合格的工程师必备要求!...快速幂探索 机智的你不甘失败,开始研究其数的规律,将这个公式写在手上、膀子上、小纸条上。吃饭睡觉都在看: ? 然后你突然发现其中的奥秘,n次幂可以拆分成一个平方计算后就剩余n/2的次幂了: ?...而这个矩阵有很多次幂,就可以使用快速幂啦,原理一致,你只需要写一个矩阵乘法就可以啦,下面提供一个矩阵快速幂求斐波那契第n项的后三位数的模板,可以拿这个去试一试poj3070的题目啦。...,尤其是矩阵快速幂,会有着各种巧妙的变形,不过跟数学有一些关系,这年头,不会点算法、不会点数学真的是举步维艰。

    62010

    理解谱聚类

    /knowledge.html 聚类是典型的无监督学习问题,其目标是将样本集划分成多个类,保证同一类的样本之间尽量相似,不同类的样本之间尽量不同,这些类称为簇(cluster)。...对于聚类问题,通过图的切割实现聚类,即将图切分成多个子图,这些子图就是对应的簇。这类算法的典型代表是谱聚类算法。 谱聚类算法构造样本集的邻接图(也称为相似度图),得到图的拉普拉斯矩阵。...聚类算法将顶点集合切分成k个子集,它们的并集是整个顶点集 ? 任意两个子集之间的交集为空 ?...定义归一化后的拉普拉斯矩阵为 ? 对于RatioCut,求解的是如下特征值问题 ? 其中n为样本数,I为单位矩阵,tr为矩阵的迹,下面给出证明。首先考虑最简单的情况,将图切分成两个子图A和 ?...这个问题的解是L的第二小的特征值所对应的特征向量。因为该矩阵最小的特征值是0,对应的特征向量是1。因此,第二小的特征值对应的特征向量近似是RatioCut的最优解。

    1.5K21

    奇异值分解SVD

    矩阵分解在机器学习领域有着广泛应用,是降维相关算法的基本组成部分。常见的矩阵分解方式有以下两种 1....将一个方阵A, 拆分成3个矩阵的乘积,其中Q是矩阵A的特征向量构成的矩阵,∧是对角线为特征值的方阵,最后一个为Q的逆矩阵。...当矩阵的行数和列数不相等时,就只能采用奇异值分解了。SVD也是同样将矩阵拆分成3个子矩阵的乘积,图示如下 ?...对于m行n列的矩阵A, 通过SVD分解之后,拆分成了3个子矩阵,其中U矩阵为m行m列的方阵,V为n行n列的方阵,∑为只有对角线有值的矩阵,其中的值称之为奇异值。...在奇异值分解中,矩阵的奇异值是按照从大到小的顺序排列的,而且减少的特别快,经常前10%的奇异值就占据了全部奇异值99%以上的比例。

    92031

    矩阵乘法的Strassen算法+动态规划算法(矩阵链相乘和硬币问题)

    矩阵乘法的Strassen 这个算法就是在矩阵乘法中采用分治法,能够有效的提高算法的效率。...先分析一下下边的 将一个矩阵分成四块 如上图,A和B矩阵都被分成了四块,该算法复杂度依然是n3,于是上边那位老哥不服,他觉得这不是最优的解,还有更优的,于是他分析了上边是四个等式,四个等式中有八个乘法...ABCDEFGH原来两个相乘矩阵里边划分好的八个小矩阵 图三 或者看这个图,总之七个矩阵变量是要求的(PPT上和这差不多,只是变量顺序换了) 图四 求出则七个矩阵,就能求出A*B的值 这个图就是...]+ m[k+1][j]+p[i-1]*p[k]*p[j] : 上边这个算法的意思是,第i个矩阵到第k个矩阵相乘的代价+第k个矩阵到第j个矩阵相乘的代价,加上这两个乘好了的前后两个矩阵相乘的代价 然后理解了怎么算...明天将推出贪心算法

    4K60
    领券