“寻找小路径结构时,Color Coding用随机颜色把目标路径变成 colorful 状态;Hamilton 路/圈的精确算法则可用子集动态规划记录已访问顶点集合。前者以目标长度为参数,后者…”
Colorful 事件 ​
要找含 $k$ 个顶点的简单路径,独立均匀把每个顶点染为
概率只依赖参数
颜色子集 DP ​
令 DP
简单路径图像 ​
普通子集 DP 若按顶点集合会有
去随机化与边界 ​
One-sided 正确性 ​
DP 返回 colorful path 时,颜色互异保证顶点互异,所以输出一定是真实简单路径;随机性只可能让已有目标在本轮不 colorful 而漏报。因此这是 one-sided Monte Carlo,可保存 DP 父指针恢复并验证路径。
重复次数来自
路径恢复与内存布局 ​
若要输出路径,每个首次置真的状态保存前驱顶点 DP[allColors,v] 反复删除当前颜色并读父指针,逆序即可恢复
只回答存在性时,可按子集大小分层保存 bitset,或让每个 (S,v) 用一位表示;要回溯则父指针通常需要
对无向路径,转移会从边的两个方向更新;有向路径只能沿入边到
一次着色的表可在找到目标后立即停止;多轮试验之间必须清空状态和父指针,但图邻接表可以复用。去随机化时着色族的枚举顺序不改变这套表语义,只改变外层运行次数。
参考资料
- Noga Alon, Raphael Yuster, Uri Zwick, Color-Coding, JACM, 1995.
- Marek Cygan et al., Parameterized Algorithms, Springer, 2015.