随机的力量(2) - 矩阵比较

文章介绍了使用Freivalds技术来快速判断两个n×n矩阵乘积是否等于第三个矩阵,通过随机生成向量并利用概率性质,以接近O(K*N^2)的时间复杂度和高准确性实现矩阵相等性的检查。
摘要由CSDN通过智能技术生成


上回我们看到通过随机,能够显著减少哈希冲突的例子。 今天,我们看看另一个随机发挥威力的地方。


问题: 给定三个n×n矩阵A, B, C, 怎么快速判别A×B 是否等于C?


最直接的想法,当然是先进行矩阵乘法得到矩阵D = A×B,然后再一一比较矩阵C和矩阵D是否相同?

比较两个n×n矩阵是否相同的时间复杂度为O(N^2),而矩阵乘法直接算法时间复杂度是O(N^3), 目前最快的矩阵乘法的时间复杂度是O(N^2.376)。综合来看,时间复杂度接近O(N^3)。


是否存在更快的方法呢?答案是肯定的,下面我们介绍一种技术 - Freivalds技术


先来看一个A*B=C的必要条件: 对于n×1向量r, A*B*r = C*r

注意,这并不是充分条件。如果A*B*r = C*r, 并不能推导出A*B一定等于C。但如果A*B*r = C*r不成立,那么A×B=C就一定不成立。


随机产生一个n×1向量r,r[i] = 0或1,A*B*r = C*r 但A*B不等于C的概率是多大呢?

可以证明,P{A*B*r = C*r, A*B != C} <= 1/2


Freivalds技术就是基于上述的必要条件和概率估计,采用Monto Carlo算法, 算法逻辑可以参考以下伪代码。


// 判断A*B=C是否成立

bool IsIdentical(A, B,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值