“这是子集动态规划。包含起点且终点不为起点的状态共有 $(n 1)2^{n 2}$ 个,另有一个起点基例。每状态至多检查 $n 1$ 个前驱,故时间为 $O(n^22^n)$,完整值表和父表各…”
形式陈述
状态空间
给定含
状态数
Hamilton 路状态与证明
给定顶点集为
必要性来自删除目标路径的最后一条边:前驱必为某个相邻
三点路径
有效
直觉
子集状态记录已经使用哪些对象,附加端点或边界状态则保留下一步转移真正需要的历史。每次删除最后一个选择会落到更小子集,表可按 popcount 分层;指数成本来自必须区分
例子与边界
枚举量推导
子掩码循环
从
位技巧让一次得到下个子掩码很便宜,却不能把总转移数写成
推论与应用
表示与恢复
当
参考资料
- Held, Karp, “A Dynamic Programming Approach to Sequencing Problems,” 1962.
- Björklund et al., “Fourier Meets Möbius,” STOC 2007.
- Cygan et al., Parameterized Algorithms, 2015.