POJ 3318 思维 + 矩阵乘法 || 随机化算法

该博客探讨了如何优化POJ 3318问题中的矩阵乘法,指出暴力求解会超时,并提出随机化算法进行有限次位置检验。作者讨论了随机化算法的局限性,即结果可能因时间而异,但通常在十次内可得到正确答案。接着,文章提出通过将矩阵乘法与向量相乘降低复杂度至O(n^2),并警告当向量中存在相等元素时,这种方法可能导致错误。为确保算法正确性,向量的每个元素必须唯一。最后,博主建议构造特定向量,保证最多500个数互不相同,而不必使用随机化方法。
摘要由CSDN通过智能技术生成

题目链接


题意:
给定三个 n ∗ n n*n nn的矩阵 A , B , C A,B,C A,B,C。问是否 A ∗ B = = C A*B == C AB==C

思路:
首先 O ( n 3 ) O(n^3) O(n3)的 暴力果断会超时。

考虑如何优化,一个很自然的想法就是只要存在一个位置, A ∗ B A*B AB的值不等于 C C C,那么能不能随机地检验有限个位置?

所以有了如下的随机化算法,按照时间进行随机化,但缺点是跟时间有很大的关系,不同的时间同一份代码交上去的结果可能不一样。

但一般十次之内是能有一次AC的


考虑其他的方法,前面是优化枚举那个 O ( n ) O(n) O(n)的过程,那么矩阵乘法的 O ( n 2 ) O(n^2) O(n2)能够优化吗?

开始我的思路走偏了,想用数论知识解决,结果把自己绕住了, 后来看了题解才知道,有一个更好的优化乘法的方法。

对于一个 1 ∗ n 1*n 1n的向量 x x x,与矩阵相乘的复杂度是 O ( n 2 ) O(n^2) O(n2)的。

如果 A ∗ B = = C A*B == C AB==C
那么一定有 x ∗ A ∗ B = = x ∗ C x*A*B == x*C xAB==xC

这样复杂度就从 O ( n 3 ) O(n^3) O(n3)变成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值