从 n 个比特到一个比特的函数 f,如果对每个输入都给出同一个答案,就是*常数*函数;如果恰好对一半的输入给出 0,就是*平衡*函数。已知 f 是二者之一,经典程序在最坏情况下必须询问超过一半的输入。 Deutsch–Jozsa 算法只询问一次。函数以*预言机*(oracle)的形式给出,即一条把 f(x) 加到一个额外量子比特上的线路。算法: 1. 用 `h` 让每个输入量子比特处于叠加; 2. 把额外的量子比特制备到 |−⟩,使预言机把 f(x) 以符号 (−1)^f(x) 的形式反冲到 |x⟩ 上; 3. 再用 `h` 让输入发生干涉,然后测量它们。 对于常数 f,所有符号都相同,各路径在 |0…0⟩ 上叠加,结果全为零。对于平衡 f,通向 |0…0⟩ 的路径恰好相互抵消,所以结果永远不会全为零。一次查询就能判定。 引擎精确地检查结果分布:“每次都”意味着概率为 1,由证明检查。