随机探测
概述
-
随机探测通过用随机的探针测试某个黑箱,来获得该黑箱高度可能的状态。
-
太抽象?没关系。就来例题。
例题
测素
-
给定一个数,判断它是否是质数。
-
我们知道,由费马小定理,\(p\) 是质数是 \(\forall x<p,x^{p-1}=1\) 的充分条件。
-
尽管这不必要,但事实上我们可以期望 \(\forall x<p,x^{p-1}=1\) 却又不是质数的 \(p\) 极少,极稀疏。
-
考虑用它来测素。这个命题很好,但枚举 \(\forall x<p\) 显然无法接受。考虑枚举一部分 \(x\) 来做检测,更进一步地,可以考虑枚举 \(<p\) 的质数。
-
实践中,只使用前 \(8\) 个质数(\(2,3,5,7,11,13,17,19\))在 \(9\times 10^{18}\) 范围内只有一个数字会判错,可以 \(O(\log)\) 地判断一个数字是否极可能是一个质数。
-
如果真的判错了怎么办?无所谓。如果判错了,那么该数字虽然不是质数,但是,它具有极高的素性,可以“充当一个质数”来使用,在绝大部分情况下也没问题。
-
更有效的办法就是 Miller-Rabin 测素,它也是典型的随机探测。
darkbzoj 2396/51Nod 1140 神奇的矩阵
-
题意:给定三个 \(n\times n\) 的矩阵 \(A,B,C\),请判断 \(A\times B=C\) 是否成立。
-
数据范围:\(T\leqslant 5,n\leqslant 10^3,v_{i,j}\leqslant 10^3\)。
-
暴力做肯定 T 了,毕竟 \(5\times 10^9\) 如果 \(1s\) 过了我们怕不是在 \(2077\) 年。
-
我会构造探针!随机构造一个 \(1\times n\) 的矩阵 \(rnd\) 作为探针,于是只要判断 \(rnd\times A\times B=rnd\times C\) 是否成立即可。
-
复杂度骤降至单次探测 \(n^2\),计算可得 \(times=10\)(考虑常数后的结果)。正确率不会证,但显然够了。
-
p.s.darkbzoj 上这道题炸了,不过可以下数据自测。
P1224 [NOI2013] 向量内积
-
没有完全理解,等一段时间。
-
23.1.15 upd:等得太久了,已经忘了。无限期推迟直到我再度修缮本篇,届时大概会考虑把这道题重新理一理。事实上,如 Quare 的“立马补了笔记”反而是不常见的。