“分治用于排序、几何、FFT 与选择;平面最近点对展示了“递归解两侧 + packing 证明线性合并”的几何版本。折半搜索把指数候选分成两半并在中间匹配,将典型 $2^n$ 枚举改成约 $2…”
形式陈述
范式
对每个变量只有选或不选两种选择的问题,用分治把
时间,显式列表通常占
空输入只含空子集,恰在目标为零时成功。其他变量域也能分半枚举,但状态数取决于每个变量的选择数,不能统一写成二进制选择的指数。
直觉
直接枚举全部组合要付
例子与边界
Subset Sum 全程执行
数列
排序双指针从最小左和与最大右和开始:和过大就向左移动右指针,过小就向右移动左指针。若求方案数,重复和要压成
成本和空间
对
双指针扫描线性,空间为
Schroeppel–Shamir 把变量均分成四组,各自存储约
失效边界
若跨半兼容条件不能由短摘要判断,组合检查可能退回
推论与应用
Meet-in-the-Middle 适合 subset sum、knapsack、密码分析和若干小规模精确搜索,核心条件是跨半兼容性可由紧凑状态快速判定。Schroeppel–Shamir 等方法还能以惰性生成降低空间,但仍保留指数时间与更复杂的生成顺序不变量。
参考资料
- Horowitz, Sahni, “Computing Partitions with Applications to Knapsack,” JACM, 1974.
- Richard Schroeppel and Adi Shamir, “A
, Algorithm for Certain NP-Complete Problems”, SIAM Journal on Computing 10(3), 1981, pp. 456–464,原技术报告。 - Jesper Nederlof and Karol Węgrzycki, Improving Schroeppel and Shamir’s Algorithm for Subset Sum via Orthogonal Vectors, 2021,作者稿,Appendix A,Lemma 3.3 的证明与 Lemma A.1:按堆惰性生成和列表及四列表匹配。