一些有趣的东西

FSYo lol

TSP 问题

2 - 近似的做法:求出最小生成树,按 dfs 序来跑就可以了。2 近似的原因是答案 OPT MST,而按 dfs 序来跑不会超过 MST 的两倍

1.5 - 近似的做法:最小生成树上奇数度数的节点做匹配。1.5 近似的原因是最小匹配 OPT(考虑把所有点都拿来匹配)

平面图 近似《Nearly Linear Time Approximation Schemes for Euclidean TSP and other Geometric Problems》


Maxcut 最大割问题:随机分点,割的期望是 OPT


用硬币生成实数概率:硬币生成一个 的概率,将 二进制表示,若生成的 就继续,< 则输出 0,> 输出 1,期望次数仍是线性


Hash 方法

负载均衡问题:使用 Consistent Hash,有 个请求要分配到 个服务器,我们已经分配好了。现在变成了 个服务器,我们要尽量快速得重新分配且尽量均匀。同理,变成 个请求我们也要快速分配。

做法:维护一个环, 个请求和 个服务器全部 Hash 到环上,每个请求由它后面第一个服务器处理。这样新加服务器就只需要对之前一段重新分配。当然,每个服务器可以在环上随机选 个点。


Point Query 问题:输入 个数,最后询问一个 的出现次数,小空间,要求以大概率满足 ,且只需要 的时间。

做法:维护一个大小 的桶,每个数 Hash 到一个桶, 直接取桶中的和,分析得到 。通过 Markov 的分析: 即有 的概率对,做 次(一起做)就有 的概率对。


K-Heavy Hitter:给一个数据流, 个元素,要求出出现次数 的元素,数据流只给一遍。(要求返回的数出现次数 次即可)

做法:动态维护上面的 Point Query,每次插入 的时候查一下,如果 就插入,否则删除。(由于值域大,所以不好最后再查)


Universal Hash:设计一个 Hash: ,使得

假设 是素数, ,其中 随机, 进制表示

证明:。虽然 不是随机,但是足够做 Point Query


Bloom Filter:插入删除,询问在不在集合, 空间, 时间,以 的概率成功

维护一个数组,插入一个 直接把 设为 1,设数组长度为 ,则考虑所有 ,把 的 某个位置都干掉的概率是 ,全部干掉的概率为 ,取 即可。


Jaccard Similarity

MinHash: 求 ,claim : 。大概需要做


Cosine Similarity:两个向量的 Similarity 定义为

问题:给定向量 ,找 Similarity 最高的向量。

SimHash

随机生成一个 ,对于向量 ,定义 。claim : 。那么我们可以用 来估算夹角。问题就变成了找 Hamming 空间最近邻查询。


Hamming 空间最近临查询:给定 ,可以在 求出 最近邻。

做法:设 ,随机 个排列 ,对每个排列,二分找到距离 最近的两个(即 LCP 最大的两个)

求与 最大的 ,仍然使用 minhash,再把 hash 值映到 ,转换为 Hamming 最近点


欧式空间问题与方法

维点集直径 个点,

随便取一个点求其最远点即为 近邻,设这个值为

,切成 的小方块,把每个点移到方块中心,每个点最多移动 ,所以直接用这个求直径,差别不到 ,复杂度 ,由于所有点都在 的网格内,而 ,故 。后面的 是排序去重。


Quad tree 四分树:不断切,每层切成 个,切到没有点

时空复杂度

欧式空间最近邻查询

最近邻,存在单次询问 时间的做法,只需要在四分树上剪枝即可。

剪枝: 是格子 中随便选的代表点

性质:若 ,则会被剪枝。(感性理解就是 太小,怎么挪都差不多),具体而言

于是就只有 的方格 会被考虑到

claims: ,若 claims 成立,则只会考虑 个方格。验证 claims,若 $r\le (1+\epsilon)r^{}diam(w)>\epsilon/2r^{}r\le r^{}+diam(w)$ 可知。


WSPD

一个 - WSPD 是一系列的 ,使得 ,且

基于四分树的 WSPD:

1
2
3
4
5
WSPD (u, v) :
if(u = v & diam(u) = 0) return
if(diam(u) < diam(v)) swap(u, v)
if(diam(u) <= epsilon * dist(u, v)) return {(u, v)}
return merge(WSPD(ui, v))

结论:WSPD 会输出 。对每个方格 考虑所有 ,有 (这是因为大了就不会向下递归)。固定 ,那么 中的 只会有 个,而 的可能取值只有两种(递归大的)。 故结论成立。

应用

求精确平面最近点对:求一个 的 WSPD, 中最近的那一对即为答案。

求近似直径:求一个 的 WSPD

Spanner:考虑一个点集 和一个 的完全图,要求保留尽量少的边 ,使得 。求一个 - WSPD,对每个 找到 连边,共 条边。证明略。

MST,欧式最小生成树:在 Spanner 上做最小生成树即可,也是 近似的。

利用随机平移的四分树构造 Tree embedding:将 映射到一颗树 上,其中 ,要求 。假设从下至上第 层的点直径为 ,第 层向下连边权 的边。有 。分析即考虑枚举 的 LCA,


降维方法

JL (Johnson Linderstrauss Transform)

,保证 个点对之间的距离误差不超过

是紧的:可以用假设维数可以更低,有些有下界的算法会有更好的结果来卡。

假设 个点为 ,那么降为后的距离 ,那么就有

JL:考虑一对点 ,我们考虑构造一个随机映射 ,使得 ,然后多次随机取平均。

随机生成一个 为向量 ,每一维在 中随机,,容易发现满足上述条件

假设向量取 维,那么就构造出映射

核心结论: ,用 Union Bound,即要求 ,于是 。(简易版本直接在 中随机)


JL 优化最小二乘

最小二乘法:,最优解为 ,复杂度

我们能否用一个 JL 矩阵 ,得到 维的 ,使得

注意到这里不能使用 Union Bound(因为不是有限个向量要卡)

一种优秀的做法可以做到 使得 ,其中 维子空间。之后的复杂度可以降到 ,但是矩阵乘法是 的,所以还需要优化。

一种优秀的方法可以用 代替,其中 每列只有随机一个元素非 0,这个元素是 随机,取 可以代替 JL 矩阵,这样矩阵乘法就降成 了。

证明: - NET:在单位球上选若干个点 ,使得任意 都能找到在 中,距离 的点,选 个点即可。此时任意 可以表示为 ,且满足 ,那么


PCA:(principle, components) 维数据点 ,想要找到 维基 ,使得每个 可以近似表示为

我们考虑设置优化条件为 (这里 正交,这样 就是 上投影的长度(的平方))

应用 取 DNA, 取 2,与地图重合;Eigen Face,用 维来拟合一张脸。

局限:要求数据有线性特征

求解: 时,容易发现要最大化 ,设 ,那么我们知道 存在正交 使得 ,那么取 的第一列即可, 的情况,取 的前 列即可。

近似求 Top Principle Componente:考虑一直乘 ,这样拉伸得最长的那一维会一直拉。若假设长轴比其他轴长,那么随机选一个 ,反复应用 ,则最后 会贴近 的方向。

算法:,若 则 break,返回 即可。

claim:随机 ,有常熟概率 ,要求 的误差,只需要

有结论 的概率 常数。常数概率有 ,于是

找第二大: 然后再找最大

SVD 可以来解 PCA,SVD 是最好的 low rank approximation,即最好的 表示秩为 的最佳近似,

CUR 分解 CUR矩阵分解 (对比SVD) - 知乎 (zhihu.com)


压缩感知

我们有 个 “测量” ,信号 测出 个值 ,我们希望从 中恢复出

压缩感知定理

其中 的每个元素从 中随机采样,则 以高概率,同时对所以 维的 - 稀疏的 ,通过观测 而精确恢复出

将恢复问题变成线性规划问题: 直接用单纯形。

Sparse recovery 与数据流方法

Sparse recovry:频数向量 若满足 ,我们可以全部将其恢复出来。其中

应用:数据流上做 直径,我们需要猜测一个 ,然后用 来划分格子,若 ,那么我们非空的节点最多就 个。我们猜测 ,对每一个 使用一个 的 Sparse recovery,找到满足条件最小的

1 - sparse recovery:维护 c_1,计算出 后 check 即可

k - sparse recovery:维护 的 Hash,每个桶维护一个 1 - sparse recovery

采样

返回 上的均匀采样

个物品的盲盒,采样 次就可以带概率凑齐 种,因此对于 k - sparse 数据流,只需要独立运行 采样就可以恢复。

随机采样实现:设计 使得 ,插入 时,若 那么插入 ,最后找到任意一个 1 - sparse 的 返回即可

应用:图数据流上求联通分量,空间

类似 Bruvka,查询的时候每一轮,对每个联通分量 找到一条跨越边然后合并,我们需要用较少的空间找到跨越边。设计 采样,定义频数向量为

那么 只含有跨越 的边

图数据流最小生成树,存在空间 近似

对每种边权维护上述的 ,边权可以向上取到 的幂,这样只有 种边权

  • 本文标题:一些有趣的东西
  • 本文作者:FSYo
  • 创建时间:2023-06-22 10:59:55
  • 本文链接:https://redefine.evanluo.top/2023/06/22/一些有趣的东西/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!