# 叠加与干涉 · 两次 H 门为什么不是「更随机」

> 连按两次 H 门，结果不是「随机的平方」，而是确定地回到 0——这是量子计算最核心的现象：干涉。这一章用代码做出这个惊人实验，一步步算清振幅怎么相消相长，讲透「相位为什么是量子威力的来源」。

- 作者：David（道雾轩）
- 专栏：写给程序员的量子计算（https://daiw.org/manual/quantum-computing.md）
- 最后更新：2026-07-14
- 原文：https://daiw.org/manual/quantum-computing/superposition
- 转载与引用：请注明出处并附原文链接（https://daiw.org/about/copyright）

# 叠加与干涉 · 两次 H 门为什么不是「更随机」

上一章埋了个雷：那个单独测不出来的**相位（负号）**，才是量子计算的魔法所在。这一章我们把它引爆——用一个会颠覆直觉的小实验。

## 一个反直觉的实验

H 门把 $\ket{0}$ 变成五五开的叠加。那**连按两次** H 门呢？按经典直觉——「随机 + 再随机 = 更随机」——你大概会猜还是五五开。跑跑看：

```python
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator

qc = QuantumCircuit(1, 1)
qc.h(0)
qc.h(0)          # 再来一个 H
qc.measure(0, 0)

sim = AerSimulator()
print(sim.run(transpile(qc, sim), shots=1000).result().get_counts())
```

```text
{'0': 1000}
```

**永远是 0！** 不是五五开，而是 100% 确定地回到 $\ket{0}$。两个「制造随机」的门叠一起，结果**完全不随机**。这在经典世界里是不可能的——两次抛硬币，不会让结果变确定。到底发生了什么？

## 一步步算：振幅相消相长

秘密在于**量子叠加不是「概率的混合」，而是「振幅的叠加」，而振幅带正负号，会互相抵消**。把两次 H 一步步算清楚：

第一个 H，$\ket{0} \to \ket{+}$：

$$
H\ket{0} = \tfrac{1}{\sqrt{2}}\ket{0} + \tfrac{1}{\sqrt{2}}\ket{1}
$$

第二个 H，分别作用在 $\ket{0}$ 和 $\ket{1}$ 上（记住 $H\ket{1} = \tfrac{1}{\sqrt{2}}\ket{0} - \tfrac{1}{\sqrt{2}}\ket{1}$，带负号）：

$$
H\ket{+} = \tfrac{1}{\sqrt{2}}\underbrace{H\ket{0}}_{\frac{1}{\sqrt2}(\ket0+\ket1)} + \tfrac{1}{\sqrt{2}}\underbrace{H\ket{1}}_{\frac{1}{\sqrt2}(\ket0-\ket1)}
= \tfrac{1}{2}\big[(\ket{0}+\ket{1}) + (\ket{0}-\ket{1})\big]
$$

现在看 $\ket{1}$ 的振幅：一个 $+\tfrac{1}{2}$，一个 $-\tfrac{1}{2}$，**加起来正好为零**——它们**相消**了(destructive interference)。而 $\ket{0}$ 的振幅：$+\tfrac{1}{2}$ 加 $+\tfrac{1}{2}$ 等于 $1$，**相长**了(constructive interference)。结果：

$$
H\ket{+} = \ket{0}
$$

<Callout type="info">
  **这就是干涉(interference)，量子计算的心脏。** 通往 $\ket{1}$ 的两条「路径」，一条振幅为正、一条为负，狭路相逢、正负抵消，于是 $\ket{1}$ 这个结果**永远不会出现**。就像水波：波峰遇波谷，归于平静。**如果没有那个负号（相位），两条路径就不会相消，你也永远造不出「确定回到 0」这种效果。** [上一章](https://daiw.org/manual/quantum-computing/single-gates)反复强调「相位单独测不出、却主宰全局」，这里你亲眼看到了：相位通过干涉，变成了可观测的、确定的结果。
</Callout>

## 再来一个：让相位「现形」

既然相位藏在振幅里、干涉能把它逼出来，我们可以设计一个实验，让 $Z$ 门那个「看不见的负号」变成一个**看得见的比特翻转**。做法：$H$，然后 $Z$，再 $H$（即 $HZH$）：

```python
qc = QuantumCircuit(1, 1)
qc.h(0)          # |0⟩ → |+⟩
qc.z(0)          # |+⟩ → |−⟩   (只是加了个负号,单独测不出)
qc.h(0)          # |−⟩ → |1⟩   (干涉把负号变成了翻转!)
qc.measure(0, 0)
# → {'1': 1000}   确定得到 1!
```

单看中间那步，$Z$ 只是给叠加态加了个测不出的负号($\ket{+}\to\ket{-}$)。可两边夹上 $H$ 之后，这个负号通过干涉，让最终结果从「确定的 0」翻成了「确定的 1」。数学上正是 $HZH = X$——**一个相位门，被干涉「翻译」成了一个比特翻转。** 相位不是摆设，它能实打实地改变你测到的东西。

## 这才是量子算法的套路

<Callout type="warn">
  **量子算法的本质，不是「同时算出所有答案」，而是「用干涉安排振幅」。** 一个量子算法通常这么设计：① 用 H 门把 qubit 铺成一个覆盖所有可能输入的巨大叠加；② 用一系列门（尤其是往「正确答案」上巧妙地加相位），让**错误答案的振幅相消、正确答案的振幅相长**；③ 最后测量，于是**大概率**测到正确答案。

  「相消错误、相长正确」——这就是 [Grover](https://daiw.org/manual/quantum-computing/grover)、[Shor](https://daiw.org/manual/quantum-computing/qft-shor) 等所有量子加速算法的共同灵魂。你在这个「两次 H」的小实验里已经见到了它的全部内核，只是后面的算法把它玩到了极致。
</Callout>

## 小结与下一章

两次 H 门确定地回到 0，揭穿了「叠加 = 概率混合」的误解：叠加是**带正负号的振幅的叠加**，会**干涉**——相消或相长。$HZH=X$ 更说明相位能被干涉「翻译」成可观测的翻转。**相消错误、相长正确，是一切量子算法的套路。**

单个 qubit 的把戏玩得差不多了。真正的算力，要多个 qubit 协同才谈得上。下一章进入多比特世界：两个 qubit 的状态空间怎么用**张量积**拼出来，以及 Qiskit 那个让无数人栽跟头的 qubit 排序。👉 [多比特与张量积：两个 qubit 的状态空间](https://daiw.org/manual/quantum-computing/multi-qubit)。

## 参考文献

- [1] Michael Nielsen.「Quantum Computing for the Very Curious.」https://quantum.country/qcvc —— 干涉与振幅的一流直觉讲解。
- [2] Qiskit 官方文档.「Hadamard and interference.」https://learning.quantum.ibm.com —— H 门与干涉实验。
- [3] Nielsen & Chuang.《Quantum Computation and Quantum Information》， §1.4 —— 干涉在算法中的角色。
