题意:
给定三个 n ∗ n n*n n∗n的矩阵 A , B , C A,B,C A,B,C。问是否 A ∗ B = = C A*B == C A∗B==C
思路:
首先 O ( n 3 ) O(n^3) O(n3)的 暴力果断会超时。
考虑如何优化,一个很自然的想法就是只要存在一个位置, A ∗ B A*B A∗B的值不等于 C C C,那么能不能随机地检验有限个位置?
所以有了如下的随机化算法,按照时间进行随机化,但缺点是跟时间有很大的关系,不同的时间同一份代码交上去的结果可能不一样。
但一般十次之内是能有一次AC的
考虑其他的方法,前面是优化枚举那个 O ( n ) O(n) O(n)的过程,那么矩阵乘法的 O ( n 2 ) O(n^2) O(n2)能够优化吗?
开始我的思路走偏了,想用数论知识解决,结果把自己绕住了, 后来看了题解才知道,有一个更好的优化乘法的方法。
对于一个 1 ∗ n 1*n 1∗n的向量 x x x,与矩阵相乘的复杂度是 O ( n 2 ) O(n^2) O(n2)的。
如果 A ∗ B = = C A*B == C A∗B==C
那么一定有 x ∗ A ∗ B = = x ∗ C x*A*B == x*C x∗A∗B==x∗C
这样复杂度就从 O ( n 3 ) O(n^3) O(n3)变成