跳到正文
EN

9.7

Deutsch-Jozsa 算法

第一个量子加速的干净范例:相位反冲把函数值写进相位,干涉一次性读出「常数还是平衡」——经典最坏要问 2ⁿ⁻¹ + 1 次,量子问 1 次。

建议先掌握

学完本节你应该能

  • 陈述 Deutsch–Jozsa 问题,并说明经典算法最坏情况需要 2ⁿ⁻¹ + 1 次查询
  • 手算单比特 Deutsch 算法的完整态演化,指出干涉在哪一步发生
  • 解释相位反冲:为什么函数值会跑到相位上
  • 说清「量子并行」为什么单独不够、必须配上干涉才能兑现加速

前几节的纠缠协议解决的是通信问题。本节换战场:计算。 我们要看到量子力学第一次在算力上干净利落地赢过经典—— 赢的方式不是「算得更快」,而是「问得更少」。

问题开门:一次提问能鉴定一枚硬币的两面吗

有人给你一个黑盒子(oracle,谕示机),里面装着函数 f:{0,1}n{0,1}f:\{0,1\}^n\to\{0,1\}——输入 nn 位串,吐出一位。他承诺 ff 只可能是两种之一:

  • 常数:所有输入都给同一个输出(全 0 或全 1);
  • 平衡:恰好一半输入给 0,另一半给 1。

任务:判断是哪种。你唯一能做的就是查询——喂一个输入,看一个输出。 问:最少查几次?

经典的账。 运气好时查 2 次(两个输出不同 ⇒ 平衡)。 但要确定无疑地判「常数」,最坏情况必须查

2n2+1=2n1+1 次(9.7.1)\frac{2^n}{2}+1=2^{n-1}+1\ \text{次}\tag{9.7.1}

——查了一半还全相同时,第 2n1+12^{n-1}+1 次才能一锤定音。n=100n=100 时这是约 6.3×10296.3\times10^{29} 次,宇宙年龄都不够。而量子算法查 1 次

朴素的「量子并行」为什么不够

量子版的黑盒必须可逆(9.2 节),标准做法是带一条辅助线:

Ufxy=xyf(x)(9.7.2)U_f\ket{x}\ket{y}=\ket{x}\ket{y\oplus f(x)}\tag{9.7.2}

\oplus 是模 2 加;作用两次还原,确实幺正。)第一招人人都想得到: 用一排 HH 造出所有输入的叠加,再查询一次:

Uf(12nxx)0=12nxxf(x)(9.7.3)U_f\left(\frac{1}{\sqrt{2^n}}\sum_x\ket{x}\right)\ket{0} =\frac{1}{\sqrt{2^n}}\sum_x\ket{x}\ket{f(x)}\tag{9.7.3}

一次调用,2n2^n 个函数值全算出来了——这就是量子并行。 但先别庆祝:这个态测一下,只随机塌出一个 (x,f(x))(x, f(x)) 对, 跟经典查一次毫无区别。9.1 节的老教训:装进态里的信息 ≠ 取得出的信息。 量子并行是必要的燃料,点火的是干涉——要让所有 f(x)f(x) 的信息 汇聚到测量结果的概率分布上。实现汇聚的扳手叫相位反冲

先手算最小案例:Deutsch 算法(n = 1)

n=1n=1 时四种可能的 ff:常数(f0f\equiv0f1f\equiv1), 平衡(f(x)=xf(x)=xf(x)=1xf(x)=1-x)。判定问题等价于问一个比特:f(0)f(1)=?f(0)\oplus f(1)=? (0 ⇒ 常数,1 ⇒ 平衡)。线路:

|0⟩ ──[H]──┬──────[H]──[测量] → 0:常数 / 1:平衡
           │Uf
|−⟩ ───────┴────────────────── (辅助位始终是 |−⟩)

逐步演化(辅助位恒为 \ket{-},只写第一位):

0 H 0+12 Uf (1)f(0)0+(1)f(1)12(9.7.6)\ket{0} \ \xrightarrow{H}\ \frac{\ket{0}+\ket{1}}{\sqrt2} \ \xrightarrow{U_f}\ \frac{(-1)^{f(0)}\ket{0}+(-1)^{f(1)}\ket{1}}{\sqrt2}\tag{9.7.6}

提出整体相位 (1)f(0)(-1)^{f(0)}(不可观测,扔掉):

=0+(1)f(0)f(1)12={+,常数,平衡=\frac{\ket{0}+(-1)^{f(0)\oplus f(1)}\ket{1}}{\sqrt2} =\begin{cases}\ket{+},&\text{常数}\\[2pt]\ket{-},&\text{平衡}\end{cases}

最后一步 HH±\ket{\pm} 转回计算基:

+H0 (常数),H1 (平衡)(9.7.7)\ket{+}\xrightarrow{H}\ket{0}\ (\text{常数}),\qquad \ket{-}\xrightarrow{H}\ket{1}\ (\text{平衡})\tag{9.7.7}

测量第一位,确定性读出答案。一次查询,问出了经典要问两次的 f(0)f(1)f(0)\oplus f(1)——注意我们没有得到 f(0)f(0)f(1)f(1) 各自的值, 只得到了它们的一个全局性质。量子加速从来都是这个套路: 放弃逐点信息,换取全局信息。

一般情形:n 比特的 Deutsch–Jozsa

|0⟩ ──[H]──┬─────[H]──[测量]┐
|0⟩ ──[H]──┤Uf   [H]──[测量]├─ 全 0:常数 / 否则:平衡
 ⋮    ⋮    │      ⋮     ⋮   │
|−⟩ ───────┴────────────────┘(辅助位不测)

接下来

Deutsch–Jozsa 是为量子力学量身定做的表演赛:问题人工、经典随机算法也不难。 真刀真枪的问题长这样:NN 个抽屉里有一个藏着钥匙,翻一个看一次, 经典平均要翻 N/2N/2 个。量子能不能少翻几个? 下一节的 Grover 算法给出 N\sqrt N——而且我们会用一张纯几何的图 (两面镜子夹出一个旋转)把它看得明明白白。

全站第 71 / 106 节 · 用 翻页