Deutsch–Jozsa:一次查询看全局
一次查询判定常数或平衡,靠的是相位踢回
黑箱里藏着一个函数 。你每次只能问一个输入,它回你 0 或 1;它保证要么是常数(全 0 或全 1),要么是平衡(一半输入给 0,一半给 1)。你要判断是哪一种。
经典的最坏情况有多坏
确定性经典算法最坏要问 次。理由很朴素:你问了 个输入,答案全一样,仍然不能排除剩下那一半全是另一个值——函数可能恰好是平衡的。再问一个,才敢下结论。
量子算法只调用一次 神谕。注意「一次」的含义:它没有读到 个函数值,只拿到了一个比特的判定——常数还是平衡。
这个差距限定在「确定性、零错误」的查询模型里。允许小概率出错时,经典随机抽几个点也能把错误压得很低;它证明的是查询模型里的分离,不是全面碾压。
下面的线路演示相位怎么被踢回控制位。先点预设「相位回踢」,再用「下一步」逐格走完这 5 个门。
相位踢回
把答案写进相位
先把输入寄存器放到均匀叠加 ,目标位准备成 。神谕是 。
当目标位处在 上, 时它不变, 时它多一个负号。这就是相位踢回:函数的取值没有写进目标位,而是以 的形式留在了输入寄存器的 振幅 里。
接着给每个输入比特再加一个 H 门。常数函数的所有振幅同号,叠加后互相加强,测量只能得到全零;平衡函数一半正一半负,全零那一项的振幅正好抵消,测量必然得到某个非零串。一次查询、一层 干涉,判定就出来了。
这也解释了它为什么只给一个比特:相位 里编码的是 的全局对称性,不是逐点的值。要把真值表读出来,仍然需要指数多的信息。
量子并行性让神谕一次算完所有 f(x),所以一次查询就拿到了整张真值表。
一次调用确实同时作用在所有 x 上,但结果被压进一个相位图案;H 层只把这个图案的「常数还是平衡」一面翻成概率。
并行性本身不产生优势,干涉才把它筛成一个答案;把「一次调用作用在所有输入上」读成「一次拿到所有答案」,是常见误读。
一句话结论
Deutsch–Jozsa 是第一个把「量子更快」讲清楚的玩具问题:经典要 次确定性查询,量子只要 1 次。它靠的不是把答案都算出来,而是用相位踢回把函数的一个整体性质写进振幅,再用 H 层干涉读出来。
本节自测 · 3 题
未作答
01一个 n=100 的 Deutsch–Jozsa 问题,函数保证是常数或平衡。确定性的经典算法最坏要查询多少次?
解析 · 经典算法即使查了 2^99 个输入都相同,也不能排除剩下 2^99 个全取另一值,所以必须再查一个。2^100 是全查一遍,不是最坏情况下的下界。
02量子算法只查一次,凭什么能判断?
解析 · 相位踢回把每个 x 的 f(x) 写进振幅的符号,H 层再把这些符号相加;常数时同相增强,平衡时相消。神谕并没有把真值表存下来,一次调用只得到一个整体的相位图案。
03算法跑完、测量得到全零。它能告诉你什么?
解析 · 全零只说明 f 是常数,至于是全 0 还是全 1,算法不区分。它判定的是一个整体性质,不是函数的全部信息;想知道具体取值还得另外查。