【学习笔记】去随机化
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\) 完美簇可以去随机化,得到一个确定性算法.