随机算法总结
文章目录
Count-min Sketch
这是一种,估计出现次数的数据结构,适用于数据流(强在线),不同的元素数不多的情况。
基本思想是一个哈希表可以估计某个值的出现的次数,但是会估多,因此多个哈希取最小值即可。这里的哈希要取均匀哈希才能保证理论复杂度的正确性。
详见 「随机算法专题」Count-min Sketch 入门。
Karp-Rabin Hash
简单的字符串哈希:。区间哈希:
二维的情况:。矩阵哈希(差分):
Min-Hash
估计两个集合(这里考虑整数集)的相似度,可以使用交并比来描述:1。
同样是考虑一个数据流的背景,每个集合只能遍历一次(预处理),然后我们若干次询问两个集合的相似度。
考虑一个均匀随机哈希。那么。我们的大致思路是构造个不同的哈希,每次随机一个,判断是否,然后取平均值。
考虑每次随机的。显然。这样的由于每个哈希函数不同的随机性,可以看成是随机的。
Sim-Hash
估计两个高维向量的相似度,可以考虑估计他们的夹角2。
考虑一个高维随机高斯向量(每一位高斯分布,然后单位化),那么。
设,取个随机的高斯向量,那么可以视为一个”保度量“的变换3。
Hamming-NN Approximation
在(约为左右)中给定,每次询问,查询到的最近邻。
Hamming 空间的度量是特殊的,并且每个维度只有或。因此距离的分析可以转化为不同分量个数的分析。
考虑把这件事变得随机一点。我们把每个点(和)作用一个排列来均匀随机打乱坐标。然后我们在中找与的 LCP 最大的个点加入候选集合。多次取不同的排列,最后求到的最近邻即可4。
总体思路类似于将 Hamming 距离通过重排列来近似转化为 LCP 长度。
Well-Separated Pair Decomposition
对点集的一个-WSPD 是一系列欧氏空间点集对满足
- (点集的距离为点对距离的最小值);
- 。
基于任意递归的空间划分形成的树形结构都可以有一个朴素的-WSPD 构造方法:
- 初始的点集对为;
- 对于当前的点集对,不妨。如果满足条件就直接返回,否则将按照树形结构的划分拆分成子集,然后对递归地构造 WSPD 即可。
复杂度,为值域,为空间维度。二维平面的情况可以四分树或者 KD-Tree,后者事实上任意维度均通用。
构造的 WSPD,则最近点对必然是某个孤点集对(但其实求最近点对可以直接 KD-Tree)。
t-Spanner
-Spanner7 是欧氏空间点集的一个欧氏子图,其中。上的距离定义为最短路,边长为欧氏距离。并且有。
可以用 WSPD 来构造-Spanner:构造-WSPD,然后将代表点连边(总共条边)。
证明可以通过对归纳来完成。
在-Spanner 上求 MST 可以得到点集的一个-近似 MST。
Tree Embedding
类似 Spanner,Tree Embedding 是将维欧氏空间上的点集映射到一棵树(),将点对的距离用树上的最短路距离代替。衡量指标为 distortion:,越小越好。
考虑构造一个分树,然后将其随机平移(等价于固定分树的总体范围,然后平移整个平面)。数据点构成树的叶子,高度为的点到高度为的点的边权值为(假设所有叶子结点深度相同)。可以理解为维立方体对角线长度,是一个距离的常数。
这个做法的 distortion 是期望级别。是分树的高度。
也可以用 KD-Tree 做一个魔改版,但是会导致逼近效果减弱(相当于曼哈顿距离)。
Johnson-Lindenstrauss Transform
Johnson-Lindenstrauss 是一种降维变换,能够一定误差内保个上的点两两之间的距离:5。
应用:快速 Linear Regression。其本质是求()。这里事实上可以看成个维空间上的点(转置),于是线性回归就变成了一个欧氏距离下的近似线性表出的问题。
Subspace 版本 JL:
- 原始方法:构造,为随机高斯向量,。
- 更优的做法:生成每列(随机)只有一个非零元素的 01 矩阵。
问题转化为。设,取,则大概率可逆。于是6。
Power Iteration
主成分分析(Principal Component Analysis)是另外一种降维方法,主旨是对于个维空间上的点找到个单位正交向量,最大化(在此子空间上的投影长度和)。
Power Iteration 一种粗暴的求最大主成分(Top Principal Component)的算法。
不妨设,那么 TPC 的目标可以写成。
设是实对称矩阵,可以对角化。设,并不妨设是最大的特征值。则目标可以写成,结论是取第一列时最大化(因为算出来就是)。
注意到的本质是先旋转,再拉伸,再旋转(单位球映射成椭球),拉伸的方向就对应了 TPC 的方向。因此我们对任意一个向量,只要其不垂直于,就可以在反复应用后拉伸到 TPC 的方向。
因此我们不断计算然后单位化即可。
另外如果足够稀疏,那么可以用的方式计算。
Sparse Recovery
数据流(Streaming)模型:可以描述为一个插入/删除的操作构成的序列,只允许单次、顺序访问,在结束后回答一些询问,一般不要求实时,但是会有较强的空间限制。
前面的 Min-Hash,Sim-Hash,Hamming-NN 均可看作数据流算法。
事实上数据集可以等价地用每个元素出现的频数构成的频数向量表达8。
记表示数据流中出现过的所有元素。定义范数:。若,称之-sparse。
Sparse Recovery 是一个数据流算法,能够给定:
- 检测数据流是否-sparse;
- 将-sparse 的数据流的完全恢复
直径估计:设为边长的格点划分,。在数据流的过程中对一个点的增删转化为其在所在格子的代表点的增删。询问时,找到最小的使得是-sparse 的,然后在上估计直径。
Stream’s Sparse Recovery
对于一个-sparse 的数据流,我们可以设计算法来恢复其频数向量:
- 首先设计一种方法,能够保证对于每个数据流中的值,存在一个只保留了相关特征的信息;
- 找到这个信息,还原的特征。
考虑构造个的均匀哈希来统计每个值的出现次数。那么对于,存在满足没有别的值与冲突的概率很高。
具体地,我们可以用哈希维护三个量:、,11。是事先确定的随机值(fingerprint)。那么如果整除且,那么说明这个哈希的没有与别的值冲突(只有整除并不一定能证明不冲突,需要用 fingerprint 来保证),并且我们可以计算来得到。事实上这是一个-sparse 信息。
这算法事实上在不知道数据流是否-sparse 的情况下也能写。而我们可以通过把恢复出来的信息删掉来检验原数据流是否-sparse。
Linear Sketch:上述算法相当于是将频数向量进行特定的线性变换,并从来还原。其优点是具有线性可加性,也可以减。也就是说我们可以恢复一个区间的频数向量。
Compressed Sensing
压缩感知是一种从低维信息还原高维的(稀疏的)信息的方法。
具体设定:找到一个使得对于任意,设,那么我们总可以通过求解来近似地找到。可以视为个线性感知器(Linear Sketch)。
我们可以构造随机高斯矩阵,然后使用线性规划 solver 暴力求解。若是维-sparse 向量,那么当时这种方法基本上可以完美还原。
-Sampling
-Sampling 可以对于数据流返回一个上的均匀采样,主要用于 support 比较大的情况。
一个对于的均匀采样可以这样得到:
- 将中的元素以的概率采样(以的概率选择这个元素);
- 在选出来的元素中均匀采样。
事实上选出来的元素中只有一种值的概率是常数,因此可以用-Sparse Recovery 来找到这个元素9。
因此我们分别取,构造采样哈希,满足。然后任意找到其中的一个-Sparse 做为采样结果。算法的空间复杂度,时间复杂度。以的概率成功。重复若干次即可得到一个高成功的采样方法。但要注意,同样的采样哈希得到的采样是相同的,因此多次重复需要使用不同的哈希。
Stream MST Approximation
图数据流是指点集不变,边集是一个数据流的模型。
考虑在图数据流上求连通分量。
考虑类似 Boruvka 算法的过程:维护当前连通块集合,每次将每个连通块的跨越边找出,然后连起来,更新连通块信息。这个算法的可拓展性在于记录跨越边的方法。
考虑对于,定义当前边集的频数向量为,满足。定义,那么可以发现恰好是的跨越边。于是可以使用采样的方式来找到跨越边。
当然我们可以沿用这个思路去求图数据流的-近似 MST。
但是注意到我们只能做均匀采样,而不能很方便地找最小值。这里考虑一个暴力的做法:将边权离散化,然后从小到大暴力枚举。
离散化:将边权 round 到最近的的方幂。仔细想想是有道理的,并且可以显著降低不同边权个数10,也就将数据流稀疏化了。
离散化后就可以对每个边权和每个结点分别维护频数向量。查询跨越边时从小到大枚举,在中查询即可。
复杂度分析:设有种边权。对于每种边权我们构造一个可加的采样,空间复杂度,找到跨越边的复杂度是,总时间复杂度。
Comments & References
1. Jaccard Similarity,空集的情况为 ↩
2. 有时也估计他们的 Cosine Similarity ↩
3. 为 Hamming 空间,距离为曼哈顿距离,这里的保度量是指夹角和 Hamming 距离 ↩
4. 其实还需要再选择 个 LCP 最大的去求最近邻,不过实践证明不太需要 ↩
5. 这说明:对于近似算法来说,“⾼维” = 维 ↩
6. 如何理解:,则,而不可逆,则形式上构造↩
7. 个人理解:命名为 Spanner 的原因是 是原图的一个生成子图 ↩
8. ⼀般假设:频数向量每⼀维的最⼤绝对值是 ↩
9. 1-Sparse 可以只需存那三个值 ↩
10. 例如↩
11. 通过一些预处理方式可以 计算 ↩
修订记录
- 2023年6月23日 第2次修订
- 2023年6月23日 创建文章