对于矩阵 \(A,B,C\) 判断是否有 \(AB=C\) :随机一个行向量 \(x\) 然后看 \(xAB\) 是否 等于 \(xC\) 。正确率约为 \(1\) 。
通过少量查询得到近似的中位数:如果要求排名误差在 \(2an\) 以内,只需要 \(O(\frac{1}{a^2})\) 次查询就可以做到很高的概率。
k-median:
给定 k 维空间的若干点 \(A_1,A_2,\dots,A_n\) ,要求预处理之后高效进行查询:查询每次给定 \(B\) ,求 \(\sum dis(B,A_i)\) 。可以求近似解。
如果存在一个点 \(P\) 和一个常数 \(c\) 满足 \(\forall i,dis(A_i,P)\in [c,2c]\) ,那考虑以下算法:
直接在 \(n\) 个点里随 \(m\) 个取出来记为 \(C_1,C_2,\dots,C_m\),估计答案为 \(\frac{n}{m}\sum dis(B,C_i)\) 即可。道理在哪儿呢,考虑令 \(X_i=dis(A_i,B)\) ,根据三角形不等式有 \(X\) 极差 \(\le 4c\) 。
Hoeffding inequality:
设独立随机变量 \(X_1,X_2,\dots,X_m\in [s,t]\) ,\(X:=\sum X_i\) ,则 \(Pr[X-E[X]\geq z]\le 2exp(\frac{-2z^2}{m(t-s)^2})\) 。
看一下式子就可以发现:常数个 \(m\) 就能使误差极大概率控制在 \(\epsilon nc\) 以内。
具体的,需要 \(1-\delta\) 的正确率时我们取 \(m=O(\frac{1}{\epsilon^2}\log(\frac{1}{\delta}))\) 。
看来误差的分析是跟每次查询的点关系不大的,无论查询如何,我们都能将误差控制在 \(\epsilon nc\) ,也即 \(\epsilon \sum dis(A_i,P)\) 内。
考虑一般的情况,考虑按 \(dis(A_i,P)\) 倍增分块,将这些点分成 \(log_2V\) 层即可,我们仍然把误差控制在了 \(\epsilon \sum dis(A_i,P)\) 内。
看来,只需要选取合理的中心点 \(P\) 即可。
我们并不需要让 \(\sum dis(A_i,P)\) 严格最小:在最优值的常数倍以内都是能接受的。
直接在给出的点里随几个点,取最优的即可。
理由考虑计算这样随,\(\sum dis(A_i,P)\) 的期望,是不超过 \(2\) 倍的最优值的。