随机化小结
交互中的随机暂时还没怎么做,等以后来总结。
我个人是比较认同 OI-wiki 对随机化技术的分类的,但是对于具体技术,这里不遵循 OI-wiki 的分类。
1 随机限制命中元素
经典应用有:3-SAT(通过随机添加限制,然后弱化到2-SAT解决
实际应用:https://atcoder.jp/contests/arc161/tasks/arc161_e
2 借助期望/概率
经典应用有:
1、随机游走的最大距离期望是根号级别,所以对于跟游走相关,而且没有顺序的 dp,可以考虑打乱后只跑 \(\sqrt n\) 以内。
2、对于 2n 个 01 变量,在 2^(2n) 中随机,随到恰好 n 个 1 的概率是 1/logn 级别。
3、对于随机序列,前缀 max 只有期望 O(logn) 个。
3 整体探测法
非常深刻的随机化思想,也通常能出一些让人降智,然后一看题解恍然大悟的题。
对于一个性质S,如果满足x,y服从S,则op(x,y)服从S 且 x服从S,y不服从S则op(x,y)不服从S的性质均可使用整体探测。
简单例题
https://www.luogu.com.cn/problem/P1224
https://www.luogu.com.cn/problem/CF1479D
4 随机染色/打乱法
这个大致可以分为 2 种,一种是把所有元素分为 0/1 两个集合,然后使用整体探测法,我在这里暂且称为 01染色(通常和整体探测一起出现),还有一种是把每个数字重新相互映射打乱一下,来防御特殊数据对某些 \(hash\) 的攻击,这里成为 赋权法(经常和hash一起出现),如果是离散意义上的赋权,那么就是随机打乱(经常和经典期望一起出现)。
对于随机化的题,最重要的还是综合运用,上述方法有的倾向于分析性质和复杂度,有的倾向于实战和乱搞。