# 量子子集和算法:从折半搜索到 $2^{0.241n}$ 量子行走 给定整数 $x_1,\ldots,x_n$ 与目标值 $s$,**子集和问题 (subset sum problem)** 要求寻找指标集 $$ I\subseteq[n]:=\{1,2,\ldots,n\},\qquad \sum_{i\in I}x_i=s, $$ 或者判定这样的 $I$ 是否存在。它是 Karp 列出的经典 NP 完全问题之一,因此我们并不期待量子计算把**任意**实例变成多项式时间——本课也不会给出这样的结论。本课研究的是一个更细、也更有实际意义的问题:对一类"随机困难实例",目前已知的经典指数时间算法的底数大约是多少,量子算法又能把底数压到多少?具体地说,经典启发式算法(Becker–Coron–Joux)把底数降到约 $2^{0.291n}$,而 Bernstein、Jeffery、Lange、Meurer 的量子算法在同一类启发式假设下达到 $$ \widetilde O\!\left(2^{0.241n}\right), $$ 其中 $\widetilde O(\cdot)$ 表示忽略 $n$ 的多项式因子(这是指数时间算法文献的标准记号,因为底数才是竞争的主战场)。 值得强调的是,这个加速**不是**"对一切子集做 Grover"能得到的。正如我们将看到的,朴素 Grover 给出的 $2^{n/2}$ 甚至追不上 1974 年的经典折半搜索。真正的答案是把四种成分组合起来:**多重表示 (multiple representations)**、**模约束筛选 (modular filtering)**、**Johnson 图上的量子行走**、以及**可相干更新的数据结构**。本课的目标是把这四种成分逐一讲清楚,并完整复现 $0.241$ 这个指数的平衡计算。 **前置知识**:读者应已完成本站的 [Grover 算法](../ch03-algo-basics/grover.md)与[振幅放大](../ch03-algo-basics/amplitude-amplification.md),并对[量子行走](../ch06-scientific-computing/quantum-walk-tutorial.md)与[碰撞/元素不同性搜索](../ch11-query-complexity/collision-element-distinctness.md)有基本了解。本课不会重新推导这些工具,但会在用到时指出每一步引用了哪个结论。 :::{admonition} 本课知识点 :class: tip 1. **[密度与困难随机实例](#subset-sum-density)**——能写出密度 $d=n/m$ 的定义并推导期望解数估计 $\frac{2^{n-m}}{n}$,解释密度接近 $1$ 的承诺可解随机实例为何处于最困难区域。 2. **[折半搜索与朴素 Grover 的平局](#meet-in-the-middle)**——能构造左右两张表把子集和化为碰撞查找,写出折半搜索的时间与空间 $\widetilde O(2^{n/2})$,并解释朴素 Grover 为何只能追平而不能超过它。 3. **[量子不平衡折半](#unbalanced-mitm)**——能用参数 $\lambda$ 建立成本模型 $T(\lambda)=\widetilde O(2^{\lambda n}+2^{(1-\lambda)n/2})$,推导平衡点 $\lambda=\frac13$ 与总复杂度 $\widetilde O(2^{n/3})$。 4. **[Johnson 图量子行走](#johnson-graph-walk)**——能定义 Johnson 图 $J(N,r)$ 与标记顶点,推导标记占比 $\epsilon\approx(r/N)^2$ 与谱隙 $\delta=\Theta(1/r)$。 5. **[行走搜索的代价公式与平衡](#walk-cost-formula)**——能由步数公式 $O(1/\sqrt{\delta\epsilon})$ 推出总查询成本 $r+\frac{N}{\sqrt r}$,并平衡得 $r=N^{2/3}$、复杂度 $\widetilde O(2^{n/3})$。 6. **[可相干更新的数据结构](#coherent-data-structure)**——能区分查询复杂度与时间复杂度,解释可逆 radix tree 为何把每步行走的更新成本控制在 $\operatorname{poly}(n)$,而排序数组方案会毁掉查询优势。 7. **[多重表示与模约束筛选](#multiple-representations)**——能计算一个解的二分表示数 $\binom{n/2}{n/4}=2^{(1/2+o(1))n}$,并解释模约束如何按 $1/M$ 的比例筛掉候选、控制中间列表的大小。 8. **[16 叶量子行走的 0.241 指数](#leaf-walk-balance)**——能由 $\log_2 B\approx 0.271n$、$\epsilon=(r/B)^8$、$\delta=\Theta(1/r)$ 推导平衡点 $r=B^{8/9}$ 与启发式指数 $2^{0.241n}$。 ::: ## 1. 问题背景:密度、困难实例与历史 (subset-sum-density)= ### 1.1 密度与"困难背包" 子集和实例的难易程度用一个无量纲参数刻画。设所有 $x_i$ 都是约 $m$ 比特的整数(即 $x_i < 2^m$),定义实例的**密度 (density)** 为 $$ d:=\frac{n}{m}. $$ 直觉如下:所有子集和的取值落在区间 $[0,\, n\cdot 2^m]$ 内,该区间的长度约为 $n\,2^m$;而子集共有 $2^n$ 个。由抽屉原理,一个"典型"目标值 $s$ 的期望解数约为 $$ \frac{2^n}{n\,2^m}=\frac{2^{n-m}}{n}. $$ - 当 $d<1$(即 $m>n$,数字比个数"长")时,$n-m<0$,上面的估计失效;实际上此时子集和撞在同一个值上的机会很多,解通常很多,随机找一个解反而容易。 - 当 $d>1$(即 $m 提示:比较两个 $2^{n/2}$ 各自的来源——一个来自把搜索空间开平方,一个来自把问题切成两半。 **练习 3【量子不平衡折半】**(→ [3.2 节](#unbalanced-mitm)) 1. 取 $\lambda=\frac13$,分别计算建表成本 $2^{\lambda n}$ 与搜索成本 $2^{(1-\lambda)n/2}$ 的指数,验证两者相等并写出总时间与总内存。 2. 证明:最小化 $\max\{\lambda,\frac{1-\lambda}{2}\}$ 的最优解必在两式相等处取得,并求出 $\lambda^\ast=\frac13$。 3. 解释 3.3 的伏笔:Grover 迭代中"对叠加态中的地址查询排序表"为什么是一个 QRAM 式的强模型假设,而在经典 RAM 中只是平凡操作。 > 提示:一个随 $\lambda$ 递增、一个随 $\lambda$ 递减,二者的最大值在交点处最小。 **练习 4【Johnson 图量子行走】**(→ [4.2 节](#johnson-graph-walk)) 1. 写出 Johnson 图 $J(N,r)$ 的顶点与相邻关系的定义,说明"标记顶点"的含义,并写出谱隙 $\delta$ 的量级。 2. 补全 4.2 的标记占比推导:验证 $\binom{N-2}{r-2}\big/\binom{N}{r}=\frac{r(r-1)}{N(N-1)}$,并说明当 $r=N^{2/3}$ 时为什么可以用 $(r/N)^2$ 近似。 > 提示:把阶乘展开相消;近似时用 $r\ll N$ 蕴含 $r-1\approx r$、$N-1\approx N$。 **练习 5【行走搜索的代价公式与平衡】**(→ [4.3 节](#walk-cost-formula)) 1. 写出行走搜索的步数公式 $O(1/\sqrt{\delta\epsilon})$,并把 $\delta=\Theta(1/r)$、$\epsilon\approx(r/N)^2$ 代入,把总查询成本 $r+\frac{1}{\sqrt{\delta\epsilon}}$ 化简为 $r+\frac{N}{\sqrt r}$。 2. 对 $f(r)=r+\frac{N}{\sqrt r}$ 求导,验证最小值在 $r^{3/2}=\frac N2$ 即 $r=\Theta(N^{2/3})$ 处取得,并说明代入 $N=2^{n/2}$ 后总复杂度为 $\widetilde O(2^{n/3})$。 > 提示:$f'(r)=1-\frac12Nr^{-3/2}$,令其为零。 **练习 6【可相干更新的数据结构】**(→ [4.5 节](#coherent-data-structure)) 1. 列出行走状态的数据结构必须在相干叠加下支持的四类操作,并分别说出设置成本、更新成本、检查成本的含义。 2. 解释为什么用排序数组存储 $r$ 个候选会把每步行走的更新成本从 $O(1)$ 放大到 $\Theta(r)$、从而毁掉量子行走的查询优势,并说明带子树计数的可逆 radix tree 如何把每次更新控制在 $\operatorname{poly}(n)$。 3. 列举"查询复杂度模型"与"完整容错门/内存模型"之间至少三项不同的成本来源,并讨论:其中哪一项对 $2^{0.241n}$ 这一结果的现实意义影响最大?为什么? **练习 7【多重表示与模约束筛选】**(→ [5.1 节](#multiple-representations)) 1. 解释"多重表示"的含义:对 $n=8$、目标解 $I=\{1,2,3,4\}$,列举全部 $\binom{4}{2}=6$ 种有序二分拆分,并写出一般情形($|I|=n/2$)下拆分数的表达式。 2. 解释模约束 $\Sigma(I_1)+\Sigma(I_2)\equiv s\pmod{M_1}$ 为什么能把中间列表压缩约 $1/M_1$ 的比例,并说明"彩票多"与"筛子紧"之间的拉锯如何决定各层模数的取法。 > 提示:随机候选对的和在模 $M_1$ 下近似均匀分布;表示数 $\binom{n/2}{n/4}$ 随 $n$ 指数增长。 **练习 8【16 叶量子行走的 0.241 指数】**(→ [6.4 节](#leaf-walk-balance)) 1. 写出 $\log_2 B\approx 0.271n$、$\epsilon=(r/B)^8$、$\delta=\Theta(1/r)$ 三个量的含义与来源,并把行走步数 $\frac{1}{\sqrt{\delta\epsilon}}$ 化简为 $\sqrt r\,(B/r)^4$。 2. 模仿 6.1,用 Stirling 公式证明 $\frac1n\log_2\binom{n/2}{n/4}\to\frac12 H(1/2)=\frac12$(这就是 5.1 中"一个解有 $2^{(1/2+o(1))n}$ 种二分表示"的依据),并把 $H(1/8)$ 的数值验证到小数点后三位。 3. 在 6.3–6.4 中,从 $\epsilon=(r/B)^8$ 与 $\delta=\Theta(1/r)$ 出发,完整重推行走步数 $\sqrt r\,(B/r)^4$ 与平衡点 $r=B^{8/9}$;然后回答:如果表示树只有 4 个叶列表($\epsilon=(r/B)^4$),平衡指数会变成多少?由此说明"叶数越多越好"的直觉在哪里开始失效。 > 提示:考虑叶块候选空间 $B$ 随叶数的变化。 ## 参考文献 - Zoo 编号 178:Daniel J. Bernstein、Stacey Jeffery、Tanja Lange 与 Alexander Meurer, [Quantum Algorithms for the Subset-Sum Problem](https://cr.yp.to/qsubsetsum/qsubsetsum-20130407.pdf). - Zoo 编号 7:Andris Ambainis, [Quantum Walk Algorithm for Element Distinctness](https://arxiv.org/abs/quant-ph/0311001). - Zoo 编号 404:Anja Becker、Jean-Sébastien Coron 与 Antoine Joux, [Improved Generic Algorithms for Hard Knapsacks](https://eprint.iacr.org/2011/474).