【学习笔记】去随机化

k+1完美函数簇

给定 \(F\subseteq G=\{f|f:V\to\{0\}\cup[k]\}\) 。对任意 \(S\subseteq V\) 如果 \(|S|=k+1\) ,那么存在 \(f\in F\) 满足 \(f\)\(S\) 上双射。我们就说 \(F\) 是个 \(k+1\) 完美函数簇。

不难发现 \(\forall g\in G\) 函数簇 \(G/{g}\)\(k+1\) 完美的。事实上大小大于\(\left((k+1)^{k+1}-(k+1)!\right)(k+1)^{|V|-k-1}\) 的函数簇都是 \(k+1\) 完美的。

染色技术去随机化

考虑这样一个随机算法:我们给图随机染色,那么我们就可以用 \(\mathcal O(2^k|V|^2)\) 的状压DP算法解决 k-path problem

这样的随机染色需要次数的量级大概是 \(e^{k}\)

去随机化则是考虑找到一个完美函数簇然后遍历其中的染色方案。

我们可以在 \(\mathcal O\left(2^{c(k+1)}|V|\log^2|V|\right)\) 的时间内得到一个大小不超过 \(2^{c(k+1)}\log^2|V|\) 的完美函数簇。(这里我不会证明,老师也没讲,大概说了一下需要用到初等数论balabala)

如此我们得到一个 \(\mathcal O\left(2^{(c+1)(k+1)}|V|^2\log^2|V|\right)\) 的确定性算法。

组队问题去随机化

问题:在 \(G(V,E)\) 中找到 \(k=\log|V|\) 个没有公共点的三角形。

不难发现分为 \(k\) 组后在每个组内寻找三角形的算法是平凡的 \(\mathcal O(n^3)\)

考虑随机分组,分组正确率最差为 \(\dfrac{k!}{(3k)^{k}}\) ,略低,时间复杂度不可接受。

考虑第二种分组方案,分 \(3k\) 组,然后在这 \(3k\) 个点两两分组不同时有 \(\mathcal O(2^{3k}k^2+n^3k^3)=\mathcal O(n^3\log^3 n)\) 的算法

那么 \(3k+1\) 完美簇可以去随机化,得到一个确定性算法.

posted @ 2023-07-21 10:47  思考人生中…  阅读(48)  评论(0编辑  收藏  举报