量子力学数学基础入门:从态矢到内积外积(附Python演示)
📐
形象比喻之后,用数学精确描述量子世界
在上一篇文章中,我们用“拆掉楼梯的大楼”“同时存在于所有楼层的人”等比喻,直观地理解了量子化、叠加、测量等核心概念。但真正要进入量子计算的大门,必须掌握量子力学的数学语言——狄拉克符号和线性代数。
本文作为姊妹篇,将用数学方式重新表述量子力学的基础概念,并辅以Python代码(NumPy)演示,让你亲手计算态矢、内积、外积,感受数学公式背后的物理意义。
一、为什么要用数学描述量子力学?
形象比喻虽然易懂,但无法精确计算。例如:
- 叠加态中的“权重”具体是多少?
- 测量得到某个结果的概率如何计算?
- 两个量子态是相同还是正交?
这些问题的答案都隐藏在数学结构中。量子力学的数学框架是希尔伯特空间中的线性代数,所有物理过程都可以转化为向量和矩阵的运算。一旦掌握这套语言,你就能理解量子门、量子算法,甚至动手模拟量子电路。
二、态矢:量子态的数学化身
1. 右矢(ket) ∣ ψ ⟩ |\psi\rangle ∣ψ⟩
在量子力学中,一个系统的状态用一个右矢(ket)表示,它是一个列向量,元素为复数。例如,量子比特的两个基态通常记为:
∣ 0 ⟩ = [ 1 0 ] , ∣ 1 ⟩ = [ 0 1 ] |0\rangle = \begin{bmatrix} 1 \\ 0 \end{bmatrix},\quad |1\rangle = \begin{bmatrix} 0 \\ 1 \end{bmatrix} ∣0⟩=[10],∣1⟩=[01]
任意一个量子比特状态可以表示为它们的线性叠加:
∣ ψ ⟩ = α ∣ 0 ⟩ + β ∣ 1 ⟩ = [ α β ] |\psi\rangle = \alpha|0\rangle + \beta|1\rangle = \begin{bmatrix} \alpha \\ \beta \end{bmatrix} ∣ψ⟩=α∣0⟩+β∣1⟩=[αβ]
其中 (\alpha, \beta) 是复数,称为概率幅,满足 ∣ α ∣ 2 + ∣ β ∣ 2 = 1 |\alpha|^2 + |\beta|^2 = 1 ∣α∣2+∣β∣2=1(归一化条件)。
2. 左矢(bra) ⟨ ψ ∣ \langle\psi| ⟨ψ∣
左矢是右矢的共轭转置(也称厄米共轭)。若 ∣ ψ ⟩ = [ α β ] |\psi\rangle = \begin{bmatrix}\alpha \\ \beta\end{bmatrix} ∣ψ⟩=[αβ],则
⟨ ψ ∣ = [ α ∗ β ∗ ] \langle\psi| = \begin{bmatrix}\alpha^* & \beta^*\end{bmatrix} ⟨ψ∣=[α∗β∗]
其中 ∗ * ∗ 表示复共轭。狄拉克符号的名字就来自“bracket”的分拆:bra + ket。
三、内积:两个态之间的“重叠”
内积定义为左矢与右矢的乘积: ⟨ ϕ ∣ ψ ⟩ \langle\phi|\psi\rangle ⟨ϕ∣ψ⟩。在矩阵形式中,就是行向量乘以列向量,得到一个复数。
设
∣ ϕ ⟩ = [ ϕ 1 ϕ 2 ⋮ ϕ n ] , ∣ ψ ⟩ = [ ψ 1 ψ 2 ⋮ ψ n ] |\phi\rangle = \begin{bmatrix}\phi_1 \\ \phi_2 \\ \vdots \\ \phi_n\end{bmatrix},\quad |\psi\rangle = \begin{bmatrix}\psi_1 \\ \psi_2 \\ \vdots \\ \psi_n\end{bmatrix} ∣ϕ⟩=ϕ1ϕ2⋮ϕn,∣ψ⟩=ψ1ψ2⋮ψn
则内积为:
⟨ ϕ ∣ ψ ⟩ = ∑ i = 1 n ϕ i ∗ ψ i \langle\phi|\psi\rangle = \sum_{i=1}^n \phi_i^* \psi_i ⟨ϕ∣ψ⟩=i=1∑nϕi∗ψi
物理意义
- 归一化: ⟨ ψ ∣ ψ ⟩ = 1 \langle\psi|\psi\rangle = 1 ⟨ψ∣ψ⟩=1,对应概率总和为1。
- 正交性:若 ⟨ ϕ ∣ ψ ⟩ = 0 \langle\phi|\psi\rangle = 0 ⟨ϕ∣ψ⟩=0,则两态正交,表示它们完全可区分。例如 ⟨ 0 ∣ 1 ⟩ = 0 \langle0|1\rangle = 0 ⟨0∣1⟩=0。
- 概率幅:当系统处于 ∣ ψ ⟩ |\psi\rangle ∣ψ⟩,测量得到 ∣ ϕ ⟩ |\phi\rangle ∣ϕ⟩ 的概率为 ∣ ⟨ ϕ ∣ ψ ⟩ ∣ 2 |\langle\phi|\psi\rangle|^2 ∣⟨ϕ∣ψ⟩∣2(玻恩规则)。
代码演示:内积
import numpy as np # 定义基态 ket0 = np.array([[1],[0]]) ket1 = np.array([[0],[1]])# 内积 <0|1> inner = np.dot(ket0.conj().T, ket1)# 共轭转置后点乘print("<0|1> =", inner[0,0])# 输出 0# 叠加态 alpha =1/np.sqrt(2) beta =1/np.sqrt(2) psi = alpha * ket0 + beta * ket1 # 归一化检查 norm = np.dot(psi.conj().T, psi)print("<psi|psi> =", norm[0,0])# 输出 1.0# 概率幅 <0|psi> amp0 = np.dot(ket0.conj().T, psi) prob0 = np.abs(amp0)**2print("概率 |<0|psi>|^2 =", prob0[0,0])# 输出 0.5四、外积:从态矢到算符
外积定义为右矢与左矢的乘积: ∣ ψ ⟩ ⟨ ϕ ∣ |\psi\rangle\langle\phi| ∣ψ⟩⟨ϕ∣,结果是一个矩阵(算符)。
∣ ψ ⟩ ⟨ ϕ ∣ = [ ψ 1 ψ 2 ⋮ ψ n ] [ ϕ 1 ∗ ϕ 2 ∗ ⋯ ϕ n ∗ ] = [ ψ 1 ϕ 1 ∗ ψ 1 ϕ 2 ∗ ⋯ ψ 1 ϕ n ∗ ψ 2 ϕ 1 ∗ ψ 2 ϕ 2 ∗ ⋯ ψ 2 ϕ n ∗ ⋮ ⋮ ⋱ ⋮ ψ n ϕ 1 ∗ ψ n ϕ 2 ∗ ⋯ ψ n ϕ n ∗ ] |\psi\rangle\langle\phi| = \begin{bmatrix}\psi_1 \\ \psi_2 \\ \vdots \\ \psi_n\end{bmatrix} \begin{bmatrix}\phi_1^* & \phi_2^* & \cdots & \phi_n^*\end{bmatrix}= \begin{bmatrix} \psi_1\phi_1^* & \psi_1\phi_2^* & \cdots & \psi_1\phi_n^* \\ \psi_2\phi_1^* & \psi_2\phi_2^* & \cdots & \psi_2\phi_n^* \\ \vdots & \vdots & \ddots & \vdots \\ \psi_n\phi_1^* & \psi_n\phi_2^* & \cdots & \psi_n\phi_n^* \end{bmatrix} ∣ψ⟩⟨ϕ∣=ψ1ψ2⋮ψn[ϕ1∗ϕ2∗⋯ϕn∗]=ψ1ϕ1∗ψ2ϕ1∗⋮ψnϕ1∗ψ1ϕ2∗ψ2ϕ2∗⋮ψnϕ2∗⋯⋯⋱⋯ψ1ϕn∗ψ2ϕn∗⋮ψnϕn∗
物理意义
- 投影算符: P ψ = ∣ ψ ⟩ ⟨ ψ ∣ P_\psi = |\psi\rangle\langle\psi| Pψ=∣ψ⟩⟨ψ∣ 作用在任何态 ∣ ϕ ⟩ |\phi\rangle ∣ϕ⟩ 上,给出 ∣ ψ ⟩ |\psi\rangle ∣ψ⟩ 方向的分量: P ψ ∣ ϕ ⟩ = ∣ ψ ⟩ ⟨ ψ ∣ ϕ ⟩ P_\psi|\phi\rangle = |\psi\rangle\langle\psi|\phi\rangle Pψ∣ϕ⟩=∣ψ⟩⟨ψ∣ϕ⟩。
- 算符构造:可观测量(如能量、自旋)可以表示为外积的线性组合。
代码演示:外积
# 外积 |0><1| outer01 = np.dot(ket0, ket1.conj().T)print("|0><1| = \n", outer01)# 输出:# [[0. 1.]# [0. 0.]]# 投影算符 P0 = |0><0| P0 = np.dot(ket0, ket0.conj().T)print("P0 = \n", P0)# 输出:# [[1. 0.]# [0. 0.]]# 应用投影算符到叠加态 psi projected = np.dot(P0, psi)print("P0|psi> = \n", projected)# 输出:# [[0.70710678]# [0. ]] 即 (1/√2)|0>五、张量积:组合多个量子系统
在量子计算中,我们经常处理多个量子比特。描述多量子比特系统的数学工具是张量积(tensor product),用符号 ⊗ \otimes ⊗ 表示。
例如,两个量子比特的基态:
∣ 0 ⟩ ⊗ ∣ 0 ⟩ = ∣ 00 ⟩ = [ 1 0 0 0 ] , ∣ 0 ⟩ ⊗ ∣ 1 ⟩ = ∣ 01 ⟩ = [ 0 1 0 0 ] |0\rangle \otimes |0\rangle = |00\rangle = \begin{bmatrix}1\\0\\0\\0\end{bmatrix},\quad |0\rangle \otimes |1\rangle = |01\rangle = \begin{bmatrix}0\\1\\0\\0\end{bmatrix} ∣0⟩⊗∣0⟩=∣00⟩=1000,∣0⟩⊗∣1⟩=∣01⟩=0100
张量积将两个向量空间组合成一个更大的空间,维度相乘。在NumPy中可以用 np.kron 计算。
代码演示:张量积
# 两个量子比特的叠加态 psi1 =(ket0 + ket1)/ np.sqrt(2)# |+> psi2 = ket0 # |0># 组合态 |psi1> ⊗ |psi2> combined = np.kron(psi1, psi2)print("|+> ⊗ |0> = \n", combined)# 输出列向量 (1/√2, 0, 1/√2, 0)^T六、从数学回到物理:测量与坍缩
测量在数学上由一组投影算符描述。对量子态 ∣ ψ ⟩ |\psi\rangle ∣ψ⟩ 测量可观测量 A A A(对应厄米算符 A ^ \hat{A} A^),得到本征值 a i a_i ai 的概率为 ⟨ ψ ∣ P i ∣ ψ ⟩ \langle\psi|P_i|\psi\rangle ⟨ψ∣Pi∣ψ⟩,其中 P i P_i Pi 是到本征空间 ∣ λ i ⟩ |\lambda_i\rangle ∣λi⟩ 的投影算符。测量后系统坍缩到 ∣ λ i ⟩ |\lambda_i\rangle ∣λi⟩。
对于量子比特,测量在计算基 { ∣ 0 ⟩ , ∣ 1 ⟩ } \{|0\rangle,|1\rangle\} {∣0⟩,∣1⟩} 下,投影算符就是 P 0 = ∣ 0 ⟩ ⟨ 0 ∣ P_0 = |0\rangle\langle0| P0=∣0⟩⟨0∣ 和 P 1 = ∣ 1 ⟩ ⟨ 1 ∣ P_1 = |1\rangle\langle1| P1=∣1⟩⟨1∣。测量得到 0 的概率为 ⟨ ψ ∣ P 0 ∣ ψ ⟩ \langle\psi|P_0|\psi\rangle ⟨ψ∣P0∣ψ⟩,即 ∣ ⟨ 0 ∣ ψ ⟩ ∣ 2 |\langle0|\psi\rangle|^2 ∣⟨0∣ψ⟩∣2。
七、小结
通过本文,我们完成了从形象比喻到精确数学的过渡:
| 物理概念 | 数学表示 | 作用 |
|---|---|---|
| 量子态 | 右矢 ∣ψ⟩(复列向量) | 描述系统状态 |
| 对偶态 | 左矢 ⟨ψ∣(复行向量) | 用于内积、外积 |
| 重叠/概率幅 | 内积 ⟨ϕ∣ψ⟩ | 计算概率 |
| 投影/算符 | 外积 ∣ψ⟩⟨ϕ∣ | 构造测量算符 |
| 组合系统 | 张量积 ⊗ | 描述多量子比特 |
掌握这些基础,你已经为学习量子门、量子电路和量子算法铺平了道路。接下来,我们将用这些数学工具亲手搭建量子电路,并运行在真实的模拟器上。
附:完整Python演示代码
你可以将以下代码保存为 .py 文件或在Jupyter Notebook中运行,亲自感受量子态的数学运算。
import numpy as np # 基态 ket0 = np.array([[1],[0]]) ket1 = np.array([[0],[1]])# 叠加态 |+> = (|0> + |1>)/√2 plus =(ket0 + ket1)/ np.sqrt(2)# 内积验证print("<0|+> =", np.dot(ket0.conj().T, plus)[0,0])print("<+|+> =", np.dot(plus.conj().T, plus)[0,0])# 投影算符 P0 P0 = np.dot(ket0, ket0.conj().T)print("P0|+> = \n", np.dot(P0, plus))# 张量积:|+> ⊗ |0> combined = np.kron(plus, ket0)print("组合态 = \n", combined)运行结果应与理论一致。

🔮 量子门与量子电路:用矩阵操控量子态,实现首个量子算法
从数学到实践:当线性代数遇上量子计算
引言:量子世界的“指令集”
在上一篇文章中,我们学习了描述量子态的数学语言——态矢、内积、外积。现在,是时候看看如何操控这些量子态了。
在经典计算机中,我们通过逻辑门(与门、或门、非门)处理比特。类似地,在量子计算机中,我们通过量子门(quantum gate)来操作量子比特。不同之处在于:经典门处理的是确定的0或1,而量子门处理的是叠加态——这意味着量子门可以同时对多个状态进行变换,这正是量子并行性的来源。
本文将带你从零开始,掌握:
- 单量子比特门的矩阵表示与作用
- 多量子比特门(重点是CNOT)如何产生纠缠
- 如何将多个量子门组合成量子电路
- 用代码实现第一个量子算法——Deutsch算法
一、量子门基础:酉矩阵与布洛赫球
1.1 量子门的数学本质
在数学上,量子门是一个酉矩阵(unitary matrix),满足 U † U = I U^\dagger U = I U†U=I,其中 U † U^\dagger U† 是U的共轭转置。酉矩阵保证量子态经过变换后仍然满足归一化条件(概率总和为1)。
量子门作用于量子态的方式就是矩阵乘法:
∣ ψ ′ ⟩ = U ∣ ψ ⟩ |\psi'\rangle = U |\psi\rangle ∣ψ′⟩=U∣ψ⟩
1.2 布洛赫球表示
单量子比特的状态可以表示为布洛赫球上的一个点:
∣ ψ ⟩ = cos θ 2 ∣ 0 ⟩ + e i ϕ sin θ 2 ∣ 1 ⟩ |\psi\rangle = \cos\frac{\theta}{2}|0\rangle + e^{i\phi}\sin\frac{\theta}{2}|1\rangle ∣ψ⟩=cos2θ∣0⟩+eiϕsin2θ∣1⟩
其中 0 ≤ θ ≤ π 0 \leq \theta \leq \pi 0≤θ≤π, 0 ≤ ϕ < 2 π 0 \leq \phi < 2\pi 0≤ϕ<2π。量子门在布洛赫球上对应着旋转操作。
二、单量子比特门:基础操作
2.1 泡利门:X、Y、Z
X门(量子非门)
X门的作用类似于经典的非门:它将 ∣ 0 ⟩ |0\rangle ∣0⟩变成 ∣ 1 ⟩ |1\rangle ∣1⟩,将 ∣ 1 ⟩ |1\rangle ∣1⟩变成 ∣ 0 ⟩ |0\rangle ∣0⟩。在布洛赫球上,它绕x轴旋转180度。
矩阵表示:
X = [ 0 1 1 0 ] X = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} X=[0110]
作用示例:
X ∣ 0 ⟩ = ∣ 1 ⟩ , X ∣ 1 ⟩ = ∣ 0 ⟩ X|0\rangle = |1\rangle, \quad X|1\rangle = |0\rangle X∣0⟩=∣1⟩,X∣1⟩=∣0⟩
Y门
Y门同时实现比特翻转和相位翻转,绕y轴旋转180度。
矩阵表示:
Y = [ 0 − i i 0 ] Y = \begin{bmatrix} 0 & -i \\ i & 0 \end{bmatrix} Y=[0i−i0]
作用示例:
Y ∣ 0 ⟩ = i ∣ 1 ⟩ , Y ∣ 1 ⟩ = − i ∣ 0 ⟩ Y|0\rangle = i|1\rangle, \quad Y|1\rangle = -i|0\rangle Y∣0⟩=i∣1⟩,Y∣1⟩=−i∣0⟩
Z门
Z门保持(|0\rangle)不变,但将(|1\rangle)的相位翻转(乘以-1),绕z轴旋转180度。
矩阵表示:
Z = [ 1 0 0 − 1 ] Z = \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix} Z=[100−1]
作用示例:
Z ∣ 0 ⟩ = ∣ 0 ⟩ , Z ∣ 1 ⟩ = − ∣ 1 ⟩ Z|0\rangle = |0\rangle, \quad Z|1\rangle = -|1\rangle Z∣0⟩=∣0⟩,Z∣1⟩=−∣1⟩
2.2 Hadamard门:创造叠加态
H门是量子计算中最重要的门之一,它可以将基态变成叠加态:
H = 1 2 [ 1 1 1 − 1 ] H = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 & 1 \\ 1 & -1 \end{bmatrix} H=21[111−1]
作用示例:
H ∣ 0 ⟩ = ∣ 0 ⟩ + ∣ 1 ⟩ 2 ≡ ∣ + ⟩ H|0\rangle = \frac{|0\rangle + |1\rangle}{\sqrt{2}} \equiv |+\rangle H∣0⟩=2∣0⟩+∣1⟩≡∣+⟩
H ∣ 1 ⟩ = ∣ 0 ⟩ − ∣ 1 ⟩ 2 ≡ ∣ − ⟩ H|1\rangle = \frac{|0\rangle - |1\rangle}{\sqrt{2}} \equiv |-\rangle H∣1⟩=2∣0⟩−∣1⟩≡∣−⟩
2.3 相位门:S门、T门
S门((\pi/2)相位门):
S = [ 1 0 0 i ] S = \begin{bmatrix} 1 & 0 \\ 0 & i \end{bmatrix} S=[100i]
T门((\pi/4)相位门):
T = [ 1 0 0 e i π / 4 ] T = \begin{bmatrix} 1 & 0 \\ 0 & e^{i\pi/4} \end{bmatrix} T=[100eiπ/4]
这些相位门在量子纠错和量子算法中扮演重要角色。
2.4 旋转门:Rx、Ry、Rz
更一般地,我们可以实现绕任意轴的旋转:
R x ( θ ) = [ cos θ 2 − i sin θ 2 − i sin θ 2 cos θ 2 ] R_x(\theta) = \begin{bmatrix} \cos\frac{\theta}{2} & -i\sin\frac{\theta}{2} \\ -i\sin\frac{\theta}{2} & \cos\frac{\theta}{2} \end{bmatrix} Rx(θ)=[cos2θ−isin2θ−isin2θcos2θ]
R y ( θ ) = [ cos θ 2 − sin θ 2 sin θ 2 cos θ 2 ] R_y(\theta) = \begin{bmatrix} \cos\frac{\theta}{2} & -\sin\frac{\theta}{2} \\ \sin\frac{\theta}{2} & \cos\frac{\theta}{2} \end{bmatrix} Ry(θ)=[cos2θsin2θ−sin2θcos2θ]
R z ( ϕ ) = [ e − i ϕ / 2 0 0 e i ϕ / 2 ] R_z(\phi) = \begin{bmatrix} e^{-i\phi/2} & 0 \\ 0 & e^{i\phi/2} \end{bmatrix} Rz(ϕ)=[e−iϕ/200eiϕ/2]
三、多量子比特门:从纠缠到计算
3.1 张量积:组合多个量子比特
描述多量子比特系统需要使用张量积。例如,两个量子比特的基态:
∣ 00 ⟩ = ∣ 0 ⟩ ⊗ ∣ 0 ⟩ = [ 1 0 0 0 ] |00\rangle = |0\rangle \otimes |0\rangle = \begin{bmatrix}1\\0\\0\\0\end{bmatrix} ∣00⟩=∣0⟩⊗∣0⟩=1000
∣ 01 ⟩ = ∣ 0 ⟩ ⊗ ∣ 1 ⟩ = [ 0 1 0 0 ] |01\rangle = |0\rangle \otimes |1\rangle = \begin{bmatrix}0\\1\\0\\0\end{bmatrix} ∣01⟩=∣0⟩⊗∣1⟩=0100
∣ 10 ⟩ = ∣ 1 ⟩ ⊗ ∣ 0 ⟩ = [ 0 0 1 0 ] |10\rangle = |1\rangle \otimes |0\rangle = \begin{bmatrix}0\\0\\1\\0\end{bmatrix} ∣10⟩=∣1⟩⊗∣0⟩=0010
∣ 11 ⟩ = ∣ 1 ⟩ ⊗ ∣ 1 ⟩ = [ 0 0 0 1 ] |11\rangle = |1\rangle \otimes |1\rangle = \begin{bmatrix}0\\0\\0\\1\end{bmatrix} ∣11⟩=∣1⟩⊗∣1⟩=0001
3.2 CNOT门:量子纠缠的缔造者
CNOT门(受控非门)是最重要的双量子比特门。它有两个输入:控制比特和目标比特。
规则:如果控制比特是(|1\rangle),则翻转目标比特;否则保持不变。
矩阵表示(4×4):
CNOT = [ 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 ] \text{CNOT} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{bmatrix} CNOT=1000010000010010
作用示例:
CNOT ∣ 00 ⟩ = ∣ 00 ⟩ \text{CNOT}|00\rangle = |00\rangle CNOT∣00⟩=∣00⟩
CNOT ∣ 01 ⟩ = ∣ 01 ⟩ \text{CNOT}|01\rangle = |01\rangle CNOT∣01⟩=∣01⟩
CNOT ∣ 10 ⟩ = ∣ 11 ⟩ \text{CNOT}|10\rangle = |11\rangle CNOT∣10⟩=∣11⟩
CNOT ∣ 11 ⟩ = ∣ 10 ⟩ \text{CNOT}|11\rangle = |10\rangle CNOT∣11⟩=∣10⟩
产生纠缠:当控制比特处于叠加态时,CNOT可以产生纠缠态:
CNOT ( H ⊗ I ) ∣ 00 ⟩ = CNOT ( ∣ 0 ⟩ + ∣ 1 ⟩ 2 ⊗ ∣ 0 ⟩ ) = ∣ 00 ⟩ + ∣ 11 ⟩ 2 \text{CNOT}(H \otimes I)|00\rangle = \text{CNOT}\left(\frac{|0\rangle+|1\rangle}{\sqrt{2}} \otimes |0\rangle\right) = \frac{|00\rangle + |11\rangle}{\sqrt{2}} CNOT(H⊗I)∣00⟩=CNOT(2∣0⟩+∣1⟩⊗∣0⟩)=2∣00⟩+∣11⟩
这就是著名的贝尔态之一,两个量子比特完美纠缠。
3.3 其他常用多比特门
- CZ门(受控Z门):当控制比特为(|1\rangle)时,对目标比特应用Z门
- SWAP门:交换两个量子比特的状态
- Toffoli门(CCNOT):双控制非门,三个量子比特,当两个控制都是(|1\rangle)时翻转目标
四、量子电路:门的序列与组合
4.1 电路的图形表示
量子电路从左到右阅读,水平线代表量子比特,方框代表量子门:
q0: ┤ H ├──■─────── ┌─┴─┐ q1: ─────┤ X ├─┤M├ └───┘ └─┘ 这个电路表示:对q0应用H门,然后以q0为控制、q1为目标的CNOT门,最后测量q1。
4.2 电路的数学本质
多个量子门组成的序列,其整体效果是各门矩阵的乘积,但顺序要反过来:
如果电路先应用门 G 1 G_1 G1,再应用 G 2 G_2 G2,最后应用 G 3 G_3 G3,则整体矩阵为:
U total = G 3 ⋅ G 2 ⋅ G 1 U_{\text{total}} = G_3 \cdot G_2 \cdot G_1 Utotal=G3⋅G2⋅G1
这是因为量子态从右向左演化:
∣ ψ final ⟩ = G 3 ( G 2 ( G 1 ∣ ψ initial ⟩ ) ) |\psi_{\text{final}}\rangle = G_3(G_2(G_1|\psi_{\text{initial}}\rangle)) ∣ψfinal⟩=G3(G2(G1∣ψinitial⟩))
4.3 测量:从量子到经典
电路的末端通常是测量操作,它将量子信息坍缩为经典比特。测量结果是一个概率分布,由波恩规则决定:得到 ∣ i ⟩ |i\rangle ∣i⟩的概率为 ∣ ⟨ i ∣ ψ ⟩ ∣ 2 |\langle i|\psi\rangle|^2 ∣⟨i∣ψ⟩∣2。
五、动手实践:用Python实现量子电路
5.1 环境准备
我们将使用NumPy进行矩阵运算,模拟量子电路。你也可以使用Qiskit等专业框架,但为了理解原理,我们先从基础做起。
import numpy as np # 定义基态 ket0 = np.array([[1],[0]]) ket1 = np.array([[0],[1]])# 定义常用门 H =1/np.sqrt(2)* np.array([[1,1],[1,-1]]) X = np.array([[0,1],[1,0]]) Z = np.array([[1,0],[0,-1]])# CNOT门 (4x4) CNOT = np.array([[1,0,0,0],[0,1,0,0],[0,0,0,1],[0,0,1,0]])5.2 示例1:制备贝尔态
# 初始态 |00> psi = np.kron(ket0, ket0)print("初始态:", psi.flatten())# 应用 H 门到第一个量子比特 H_on_first = np.kron(H, np.eye(2)) psi = H_on_first @ psi print("H门后:", psi.flatten())# 应用 CNOT 门 psi = CNOT @ psi print("贝尔态:", psi.flatten())# 验证概率幅print("|00>概率幅:", psi[0,0])print("|11>概率幅:", psi[3,0])print("概率和:", np.abs(psi[0,0])**2+ np.abs(psi[3,0])**2)输出:
初始态: [1. 0. 0. 0.] H门后: [0.70710678 0. 0.70710678 0.] 贝尔态: [0.70710678 0. 0. 0.70710678] |00>概率幅: 0.70710678 |11>概率幅: 0.70710678 概率和: 1.0 这正是纠缠态 ∣ 00 ⟩ + ∣ 11 ⟩ 2 \frac{|00\rangle + |11\rangle}{\sqrt{2}} 2∣00⟩+∣11⟩!
5.3 示例2:Deutsch算法(最简单的量子算法)
Deutsch算法解决的问题:给定一个单比特函数 f : { 0 , 1 } → { 0 , 1 } f: \{0,1\} \to \{0,1\} f:{0,1}→{0,1},判断它是常数函数( f ( 0 ) = f ( 1 ) f(0)=f(1) f(0)=f(1))还是平衡函数( f ( 0 ) ≠ f ( 1 ) f(0) \neq f(1) f(0)=f(1))。
经典方法需要计算两次,而量子方法只需一次函数调用!
电路实现:
q0: |0> ── H ── U_f ── H ── M q1: |1> ── H ─────────── 其中 U f U_f Uf是量子预言机,实现: U f ∣ x ⟩ ∣ y ⟩ = ∣ x ⟩ ∣ y ⊕ f ( x ) ⟩ U_f|x\rangle|y\rangle = |x\rangle|y \oplus f(x)\rangle Uf∣x⟩∣y⟩=∣x⟩∣y⊕f(x)⟩。
defdeutsch_algorithm(oracle_type):""" 实现Deutsch算法 oracle_type: 'constant' 或 'balanced' """# 初始态 |0>|1> psi = np.kron(ket0, ket1)# 第一步:对两个量子比特应用H门 H2 = np.kron(H, H) psi = H2 @ psi # 第二步:应用U_f(根据函数类型)if oracle_type =='constant_0':# f(0)=0, f(1)=0: 恒等变换 U_f = np.eye(4)elif oracle_type =='constant_1':# f(0)=1, f(1)=1: 在第二个比特上应用X门 U_f = np.kron(np.eye(2), X)elif oracle_type =='balanced_identity':# f(0)=0, f(1)=1: 恒等变换(但注意,这里其实是平衡函数的一种)# 更准确地说,平衡函数可以是f(x)=x,即CNOT U_f = CNOT elif oracle_type =='balanced_neg':# f(0)=1, f(1)=0: f(x)=x⊕1,先X再CNOT U_f = CNOT @ np.kron(np.eye(2), X) psi = U_f @ psi # 第三步:对第一个量子比特再次应用H门 H_on_first = np.kron(H, np.eye(2)) psi = H_on_first @ psi # 第四步:测量第一个量子比特# 测量在计算基下的概率 prob_0 = np.abs(psi[0,0])**2+ np.abs(psi[1,0])**2# |00>或|01> prob_1 = np.abs(psi[2,0])**2+ np.abs(psi[3,0])**2# |10>或|11> result =0if prob_0 >0.5else1# 结果解读:如果测得0,是常数函数;如果测得1,是平衡函数return result # 测试print("常数函数(f=0)结果:", deutsch_algorithm('constant_0'))print("常数函数(f=1)结果:", deutsch_algorithm('constant_1'))print("平衡函数(f(x)=x)结果:", deutsch_algorithm('balanced_identity'))print("平衡函数(f(x)=x⊕1)结果:", deutsch_algorithm('balanced_neg'))输出:
常数函数(f=0)结果: 0 常数函数(f=1)结果: 0 平衡函数(f(x)=x)结果: 1 平衡函数(f(x)=x⊕1)结果: 1 这正是Deutsch算法的精髓:一次量子查询就能区分常数函数和平衡函数!
六、常用量子门速查表
| 门 | 名称 | 矩阵表示 | 作用 |
|---|---|---|---|
| H | Hadamard | 1 2 [ 1 1 1 − 1 ] \frac{1}{\sqrt{2}}\begin{bmatrix}1&1\\1&-1\end{bmatrix} 21[111−1] | 创造叠加态 |
| X | Pauli-X | [ 0 1 1 0 ] \begin{bmatrix}0&1\\1&0\end{bmatrix} [0110] | 比特翻转 |
| Y | Pauli-Y | [ 0 − i i 0 ] \begin{bmatrix}0&-i\\i&0\end{bmatrix} [0i−i0] | 比特+相位翻转 |
| Z | Pauli-Z | [ 1 0 0 − 1 ] \begin{bmatrix}1&0\\0&-1\end{bmatrix} [100−1] | 相位翻转 |
| S | 相位门 | [ 1 0 0 i ] \begin{bmatrix}1&0\\0&i\end{bmatrix} [100i] | π / 2 \pi/2 π/2相位 |
| T | (\pi/8)门 | [ 1 0 0 e i π / 4 ] \begin{bmatrix}1&0\\0&e^{i\pi/4}\end{bmatrix} [100eiπ/4] | π / 4 \pi/4 π/4相位 |
| CNOT | 受控非 | [ 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 ] \begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&0&1\\0&0&1&0\end{bmatrix} 1000010000010010 | 控制翻转 |
| CZ | 受控Z | [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 − 1 ] \begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&0&-1\end{bmatrix} 100001000010000−1 | 控制相位 |
七、小结与展望
通过本文,我们完成了从数学到实践的跨越:
- 量子门是酉矩阵,作用于量子态实现状态变换
- 单量子比特门包括泡利门、Hadamard门、相位门和旋转门
- 多量子比特门(如CNOT)可以产生纠缠,这是量子计算的核心资源
- 量子电路是量子门的序列组合,其整体效果是矩阵的乘积
- Deutsch算法展示了量子算法的优势——一次查询区分函数类型
这些基础概念是理解更复杂量子算法(如Grover搜索、Shor分解)的基石。在后续文章中,我们将探索:
- 量子纠缠与贝尔不等式
- 量子隐形传态
- Grover搜索算法
- 量子傅里叶变换与Shor算法
附:完整代码与练习
你可以将本文代码整理成一个Jupyter Notebook,亲自动手运行,观察每个步骤的量子态变化。
思考题:
- 验证H门满足 H 2 = I H^2 = I H2=I(即两次应用H门回到原态)
- 计算 H X H HXH HXH 等于什么门?提示:用矩阵乘法验证
- 尝试用CNOT和单比特门实现SWAP门
欢迎在评论区分享你的答案和疑问!

⚛️ 量子纠缠与贝尔态:当两个量子比特拥有“心灵感应”
爱因斯坦称之为“鬼魅般的超距作用”,它却是量子计算的核心资源
引言:超越时空的关联
想象一下:你有一对神奇的硬币,无论将它们带到地球的两端还是宇宙的尽头,当你打开其中一个看到它是“正面”的瞬间,另一个会同时变成“反面”——不是信息传递,不是巧合,而是一种更本质的关联。
这就是量子纠缠(quantum entanglement)——量子力学中最反直觉、也最重要的现象。爱因斯坦曾困惑地称它为“鬼魅般的超距作用”(spooky action at a distance),但无数实验证明,它是真实存在的自然规律。
本文将带你深入理解:
- 什么是量子纠缠?它如何产生?
- 贝尔态(Bell states)——四种最大纠缠态的数学描述
- 如何用实验验证纠缠的存在?(贝尔不等式)
- 纠缠在量子计算和量子通信中的应用
一、从独立到纠缠:两个量子比特的“联姻”
1.1 独立系统的状态
在上一篇文章中,我们学习了如何用张量积描述多个量子比特的组合系统。对于两个独立的量子比特,它们的状态可以写成各自状态的张量积:
∣ ψ ⟩ A ⊗ ∣ ψ ⟩ B |\psi\rangle_A \otimes |\psi\rangle_B ∣ψ⟩A⊗∣ψ⟩B
例如,如果两个比特都处于 ∣ 0 ⟩ |0\rangle ∣0⟩,则组合态为 ∣ 0 ⟩ A ⊗ ∣ 0 ⟩ B = ∣ 00 ⟩ |0\rangle_A \otimes |0\rangle_B = |00\rangle ∣0⟩A⊗∣0⟩B=∣00⟩。
这种状态称为可分离态(separable state)——两个比特之间没有任何关联,测量其中一个的结果完全独立于另一个。
1.2 纠缠态的定义
当一个量子态不能写成两个独立子系统的张量积时,我们就称这个态是纠缠态(entangled state)。换句话说,纠缠态中两个粒子的状态是相互关联的,无法单独描述其中一个而不涉及另一个。
最著名的纠缠态就是贝尔态(Bell states),它们是两量子比特系统的最大纠缠态,构成了四维希尔伯特空间中的一组正交归一基。
二、贝尔态:四种最大纠缠态
2.1 四个贝尔态的数学形式
贝尔态有四个,通常记为 ∣ Φ + ⟩ |\Phi^+\rangle ∣Φ+⟩、 ∣ Φ − ⟩ |\Phi^-\rangle ∣Φ−⟩、 ∣ Ψ + ⟩ |\Psi^+\rangle ∣Ψ+⟩、 ∣ Ψ − ⟩ |\Psi^-\rangle ∣Ψ−⟩:
∣ Φ + ⟩ = 1 2 ( ∣ 00 ⟩ + ∣ 11 ⟩ ) ∣ Φ − ⟩ = 1 2 ( ∣ 00 ⟩ − ∣ 11 ⟩ ) ∣ Ψ + ⟩ = 1 2 ( ∣ 01 ⟩ + ∣ 10 ⟩ ) ∣ Ψ − ⟩ = 1 2 ( ∣ 01 ⟩ − ∣ 10 ⟩ ) \begin{aligned} |\Phi^+\rangle &= \frac{1}{\sqrt{2}} (|00\rangle + |11\rangle) \\ |\Phi^-\rangle &= \frac{1}{\sqrt{2}} (|00\rangle - |11\rangle) \\ |\Psi^+\rangle &= \frac{1}{\sqrt{2}} (|01\rangle + |10\rangle) \\ |\Psi^-\rangle &= \frac{1}{\sqrt{2}} (|01\rangle - |10\rangle) \end{aligned} ∣Φ+⟩∣Φ−⟩∣Ψ+⟩∣Ψ−⟩=21(∣00⟩+∣11⟩)=21(∣00⟩−∣11⟩)=21(∣01⟩+∣10⟩)=21(∣01⟩−∣10⟩)
这些态有两个重要特征:
- 等概率叠加:每个贝尔态都是两个基态的等权重叠加,系数绝对值均为 1 / 2 1/\sqrt{2} 1/2
- 完美关联:以 ∣ Φ + ⟩ |\Phi^+\rangle ∣Φ+⟩ 为例,测量两个比特,要么都得到0,要么都得到1,各50%概率——结果完全相关
2.2 贝尔态的物理意义
在 ∣ Φ + ⟩ |\Phi^+\rangle ∣Φ+⟩ 态中,两个比特处于“要么都是0,要么都是1”的关联状态。无论它们相距多远,只要没有外界干扰,这种关联都保持。当你测量第一个比特得到0时,第二个比特瞬间坍缩到0;如果得到1,第二个也坍缩到1。
这种“瞬时影响”正是爱因斯坦无法接受的“鬼魅般的超距作用”。但要注意:不能利用它超光速传递信息——因为测量结果是随机的,你无法控制自己得到0还是1,也就无法编码信息发送给远方。
2.3 用薛定谔的猫做类比
科普中国的文章用一个生动的比喻解释了纠缠:
用薛定谔的猫做比喻,就是 A 和 B 两只猫如果形成上面的纠缠态:无论两只猫相距多远,即便在宇宙的两端,当猫 A 是“死”的时候,猫 B 必然是“生”;当猫 A 是“生”的时候,猫 B 一定是“死”。
当然,猫这种宏观物体不可能维持纠缠(会在几万亿分之一秒内因“退相干”变成经典状态),但基本粒子(如光子、电子)可以。
三、如何制备贝尔态?——CNOT门的神奇作用
3.1 标准制备电路
制备贝尔态的标准电路非常简单:H门 + CNOT门
q0: |0> ── H ──■── │ q1: |0> ───────⊕── 具体步骤:
- 初始态: ∣ 00 ⟩ |00\rangle ∣00⟩
- 对第一个比特应用H门: H ∣ 0 ⟩ = ∣ 0 ⟩ + ∣ 1 ⟩ 2 H|0\rangle = \frac{|0\rangle + |1\rangle}{\sqrt{2}} H∣0⟩=2∣0⟩+∣1⟩,整体态变为 ∣ 00 ⟩ + ∣ 10 ⟩ 2 \frac{|00\rangle + |10\rangle}{\sqrt{2}} 2∣00⟩+∣10⟩
- 应用CNOT门(控制位q0,目标位q1):当控制位为 ∣ 1 ⟩ |1\rangle ∣1⟩ 时翻转目标位,得到 ∣ 00 ⟩ + ∣ 11 ⟩ 2 = ∣ Φ + ⟩ \frac{|00\rangle + |11\rangle}{\sqrt{2}} = |\Phi^+\rangle 2∣00⟩+∣11⟩=∣Φ+⟩
3.2 数学推导
用矩阵形式验证:
初始态: ∣ 00 ⟩ = [ 1 0 0 0 ] \text{初始态: } |00\rangle = \begin{bmatrix}1 \\ 0 \\ 0 \\ 0\end{bmatrix} 初始态: ∣00⟩=1000
应用 H ⊗ I H \otimes I H⊗I:
H ⊗ I = 1 2 [ 1 0 1 0 0 1 0 1 1 0 − 1 0 0 1 0 − 1 ] H \otimes I = \frac{1}{\sqrt{2}} \begin{bmatrix}1 & 0 & 1 & 0 \\ 0 & 1 & 0 & 1 \\ 1 & 0 & -1 & 0 \\ 0 & 1 & 0 & -1\end{bmatrix} H⊗I=211010010110−10010−1
乘以 (|00\rangle) 得到:
1 2 [ 1 0 1 0 ] = ∣ 00 ⟩ + ∣ 10 ⟩ 2 \frac{1}{\sqrt{2}} \begin{bmatrix}1 \\ 0 \\ 1 \\ 0\end{bmatrix} = \frac{|00\rangle + |10\rangle}{\sqrt{2}} 211010=2∣00⟩+∣10⟩
应用CNOT矩阵:
CNOT = [ 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 ] \text{CNOT} = \begin{bmatrix}1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0\end{bmatrix} CNOT=1000010000010010
乘以中间态得到:
1 2 [ 1 0 0 1 ] = ∣ 00 ⟩ + ∣ 11 ⟩ 2 = ∣ Φ + ⟩ \frac{1}{\sqrt{2}} \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} = \frac{|00\rangle + |11\rangle}{\sqrt{2}} = |\Phi^+\rangle 211001=2∣00⟩+∣11⟩=∣Φ+⟩
3.3 其他贝尔态的制备
通过改变初始态或在CNOT前后添加单比特门,可以制备所有四个贝尔态:
| 目标贝尔态 | 制备电路 |
|---|---|
| ∣ Φ + ⟩ |\Phi^+\rangle ∣Φ+⟩ | H on q0, CNOT(q0,q1) |
| ∣ Φ − ⟩ |\Phi^-\rangle ∣Φ−⟩ | H on q0, Z on q0, CNOT(q0,q1) |
| ∣ Ψ + ⟩ |\Psi^+\rangle ∣Ψ+⟩ | H on q0, X on q1, CNOT(q0,q1) |
| ∣ Ψ − ⟩ |\Psi^-\rangle ∣Ψ−⟩ | H on q0, Z on q0, X on q1, CNOT(q0,q1) |
四、实验验证:贝尔不等式与“鬼魅”的终结
4.1 局域隐变量理论与贝尔不等式
面对量子纠缠的“超距作用”,爱因斯坦等人提出了一种替代解释:可能存在某些隐藏变量(hidden variables)预先决定了测量结果,只是我们尚未发现。这种观点称为局域隐变量理论(local hidden variable theory)。
1964年,物理学家约翰·贝尔(John Bell)提出了一个关键的不等式——贝尔不等式,可以区分量子力学和局域隐变量理论。如果存在局域隐变量,实验结果必须满足:
∣ h ( a , b ) − h ( a , c ) ∣ − h ( b , c ) ≤ 1 |h(a,b)-h(a,c)|-h(b,c) \leq 1 ∣h(a,b)−h(a,c)∣−h(b,c)≤1
后来改进的CHSH不等式更便于实验检验:
∣ h ( a , b ) − h ( a , b ′ ) + h ( a ′ , b ) + h ( a ′ , b ′ ) ∣ ≤ 2 |h(a,b)-h(a,b')+h(a',b)+h(a',b')| \leq 2 ∣h(a,b)−h(a,b′)+h(a′,b)+h(a′,b′)∣≤2
如果量子力学是正确的,纠缠态的实验结果会违反这个不等式,即大于2。
4.2 实验验证的历史
- 1982年:法国物理学家阿斯派克(Alain Aspect)团队首次在光学实验中明确观测到违反贝尔不等式的结果
- 2016年:“墨子号”量子科学实验卫星在1200公里的星地距离上检验贝尔不等式,再次证实量子力学的正确性
- 2025年:广西师范大学廖广睿教授团队依托BESIII探测器,以高达99.99999%的置信度证实量子非局域特性,显著违反CH不等式
这些实验反复证明:局域隐变量理论是错误的,量子纠缠是真实存在的。正如科普中国总结的:“实验已经基本上证实了局域隐变量理论是不对的,量子力学是对的,局域性必须被抛弃”。
五、贝尔态的应用:从量子传态到量子密钥
贝尔态不仅是理论上的奇妙现象,更是量子信息技术的核心资源。
5.1 量子隐形传态
1997年,塞林格(Zeilinger)团队首次实现量子隐形传态(quantum teleportation)实验。其原理是:利用一对预先共享的贝尔态,可以将一个未知量子态“传输”到远方,而无需传输物理粒子。
过程概要:
- 发送方(Alice)拥有待传输的未知态 (|\psi\rangle) 和贝尔态的一半
- Alice对 (|\psi\rangle) 和她手中的贝尔态一半进行贝尔基测量
- 测量结果通过经典信道发送给接收方(Bob)
- Bob根据收到的信息,对他的贝尔态另一半施加相应的门操作,即可恢复出 (|\psi\rangle)
5.2 量子密钥分发
贝尔态在量子密钥分发(QKD)中也有关键作用。例如Ekert91协议利用对贝尔不等式违反的检验来生成安全密钥——任何窃听行为都会破坏纠缠,从而被检测到。
5.3 纠缠交换与量子网络
通过纠缠交换(entanglement swapping),可以实现没有直接相互作用的粒子之间建立纠缠,这是构建量子网络的基础。
六、动手实践:用Python制备贝尔态
下面我们用NumPy模拟制备和测量贝尔态的过程。
import numpy as np # 定义基态 ket0 = np.array([[1],[0]]) ket1 = np.array([[0],[1]])# 定义门 H =1/np.sqrt(2)* np.array([[1,1],[1,-1]]) X = np.array([[0,1],[1,0]]) Z = np.array([[1,0],[0,-1]])# CNOT门 CNOT = np.array([[1,0,0,0],[0,1,0,0],[0,0,0,1],[0,0,1,0]])defprepare_bell_state(type='phi+'):""" 制备四种贝尔态 type: 'phi+', 'phi-', 'psi+', 'psi-' """# 初始态 |00> psi = np.kron(ket0, ket0)iftype=='phi+':# |Φ+> = (|00> + |11>)/√2# H on q0, then CNOT H_on_first = np.kron(H, np.eye(2)) psi = H_on_first @ psi psi = CNOT @ psi eliftype=='phi-':# |Φ-> = (|00> - |11>)/√2# H, Z on q0, then CNOT H_on_first = np.kron(H, np.eye(2)) Z_on_first = np.kron(Z, np.eye(2)) psi = H_on_first @ psi psi = Z_on_first @ psi psi = CNOT @ psi eliftype=='psi+':# |Ψ+> = (|01> + |10>)/√2# H on q0, X on q1, then CNOT H_on_first = np.kron(H, np.eye(2)) X_on_second = np.kron(np.eye(2), X) psi = H_on_first @ psi psi = X_on_second @ psi psi = CNOT @ psi eliftype=='psi-':# |Ψ-> = (|01> - |10>)/√2# H, Z on q0, X on q1, then CNOT H_on_first = np.kron(H, np.eye(2)) Z_on_first = np.kron(Z, np.eye(2)) X_on_second = np.kron(np.eye(2), X) psi = H_on_first @ psi psi = Z_on_first @ psi psi = X_on_second @ psi psi = CNOT @ psi return psi # 测试制备 bell_phi_plus = prepare_bell_state('phi+')print("|Φ+> =")print(bell_phi_plus.flatten())print("\n概率幅平方和:", np.sum(np.abs(bell_phi_plus.flatten())**2))# 验证关联性:测量第一个比特后第二个比特的状态defmeasure_first_qubit(psi, result=0):""" 模拟测量第一个比特,得到指定结果后系统的坍缩状态 """# 测量得到0的投影算符:|0><0| ⊗ I P0 = np.kron(np.array([[1,0],[0,0]]), np.eye(2))if result ==0: collapsed = P0 @ psi norm = np.sqrt(np.sum(np.abs(collapsed)**2))return collapsed / norm else: P1 = np.kron(np.array([[0,0],[0,1]]), np.eye(2)) collapsed = P1 @ psi norm = np.sqrt(np.sum(np.abs(collapsed)**2))return collapsed / norm # 对|Φ+>进行测量模拟print("\n"+"="*50)print("对|Φ+>进行测量模拟:") psi = bell_phi_plus # 测量第一个比特得到0 psi_after_0 = measure_first_qubit(psi,0)print("测得q0=0后,系统状态:")print(psi_after_0.flatten())print("q1的状态:","|0>"ifabs(psi_after_0[0,0])>0.5else"|1>")# 测量第一个比特得到1 psi_after_1 = measure_first_qubit(psi,1)print("\n测得q0=1后,系统状态:")print(psi_after_1.flatten())print("q1的状态:","|0>"ifabs(psi_after_1[0,0])>0.5else"|1>")运行结果:
|Φ+> = [0.70710678 0. 0. 0.70710678] 概率幅平方和: 1.0 ================================================== 对|Φ+>进行测量模拟: 测得q0=0后,系统状态: [1. 0. 0. 0.] q1的状态: |0> 测得q0=1后,系统状态: [0. 0. 0. 1.] q1的状态: |1> 完美验证了 ∣ Φ + ⟩ |\Phi^+\rangle ∣Φ+⟩ 的关联性:测得q0为0时q1必为0,测得q0为1时q1必为1!
七、从两体到多体:GHZ态
贝尔态是两个粒子的纠缠,而GHZ态(Greenberger-Horne-Zeilinger state)将纠缠推广到多个粒子:
∣ G H Z ⟩ = ∣ 0 ⟩ ⊗ n + ∣ 1 ⟩ ⊗ n 2 |GHZ\rangle = \frac{|0\rangle^{\otimes n} + |1\rangle^{\otimes n}}{\sqrt{2}} ∣GHZ⟩=2∣0⟩⊗n+∣1⟩⊗n
对于n=3的情况:
∣ G H Z 3 ⟩ = ∣ 000 ⟩ + ∣ 111 ⟩ 2 |GHZ_3\rangle = \frac{|000\rangle + |111\rangle}{\sqrt{2}} ∣GHZ3⟩=2∣000⟩+∣111⟩
GHZ态是真多体纠缠态,系统中任意两个子系统之间都存在纠缠关联,具有重要的应用价值,特别是用于设计量子纠错码。
八、小结与展望
通过本文,我们深入理解了量子纠缠这一核心概念:
| 概念 | 要点 |
|---|---|
| 量子纠缠 | 多粒子系统的非定域关联,无法分解为独立子系统的张量积 |
| 贝尔态 | 四种两粒子最大纠缠态,构成正交归一基 |
| 制备方法 | H门 + CNOT门可制备所有贝尔态 |
| 贝尔不等式 | 区分量子力学与局域隐变量理论的实验判据 |
| 实验验证 | 多次实验以高置信度违反贝尔不等式,证实量子非局域性 |
| 应用领域 | 量子隐形传态、量子密钥分发、纠缠交换、量子网络 |
最新研究进展表明,2025年科学家们已在多个平台上实现高保真度的贝尔态制备和纠缠验证,纠缠研究正从两体走向多体,从基础物理走向实际应用。
在下一篇文章中,我们将探索如何利用纠缠实现量子隐形传态——在不传输粒子的情况下传输量子态,敬请期待!
附:完整代码与思考题
你可以将本文代码整理成Jupyter Notebook,亲手体验制备贝尔态的过程。
思考题:
- 验证其他三个贝尔态的相关性:在 ∣ Ψ + ⟩ |\Psi^+\rangle ∣Ψ+⟩ 中,两个比特的测量结果是什么关系?
- 尝试制备3比特GHZ态,并验证其纠缠特性
- 阅读关于2025年BESIII实验的报道,思考为什么要在强相互作用系统中验证贝尔不等式?
欢迎在评论区分享你的答案和疑问!

⚡ 量子隐形传态:当科学幻想照进现实
不传输物质,只传输“灵魂”——量子态如何实现星际穿越般的奇迹
引言:从《星际迷航》到量子实验室
想象一下这样的场景:你走进一个透明的传送舱,一阵光芒闪过,你在原地消失,同时在数光年外的遥远星球上重新出现——这是《星际迷航》中经典的“传送术”(Teleportation)场景,也是无数科幻迷心中的终极梦想。
现实中的科学家们,真的在实验室里实现了类似的过程,只不过传送的不是人体,而是微观粒子的量子态。这个过程,就是量子隐形传态(Quantum Teleportation)——1993年由六位理论物理学家提出,1997年由安东·塞林格团队首次实验验证,并最终为塞林格赢得了2022年诺贝尔物理学奖。
本文将带你深入理解:
- 量子隐形传态到底是什么?它和科幻中的传送有何区别?
- 完整的协议流程是怎样的?(附数学推导)
- 2025年最新的实验突破有哪些?
- 为什么它不能实现“超光速传输”和“人体传送”?
一、什么是量子隐形传态?
1.1 核心定义
量子隐形传态是一种利用量子纠缠和经典通信,将一个粒子的未知量子态精确地“传递”到另一个远处粒子上的技术。
关键点在于:
- ✅ 传输的是量子态(信息),而非粒子本身
- ✅ 原粒子的量子态在传输过程中被破坏(符合不可克隆定理)
- ✅ 整个过程需要量子信道(纠缠对)和经典信道(如光纤、无线电)共同完成
1.2 与科幻传送的本质区别
| 对比维度 | 科幻传送(如《星际迷航》) | 量子隐形传态(现实) |
|---|---|---|
| 传输对象 | 人/物体本身(物质+能量+信息) | 仅量子态(信息) |
| 原物体状态 | 消失 | 量子态被破坏,粒子本身仍在 |
| 传输速度 | 瞬间(超光速) | 受限于经典通信 ≤ 光速 |
| 可行性 | 科幻想象 | 已在实验室实现 |
正如科普中国明确指出的:“量子隐形传态仅仅传送量子客体所携带的量子信息,量子客体并未消失……自然客体具有‘物质、能量、信息’三要素,只有这三个要素都消失才可以说该客体被消失了。”
二、量子隐形传态的完整协议
2.1 角色与准备
让我们用经典的“Alice与Bob”故事来描述:
- Alice:信息发送方,拥有一个待传输的未知量子态 ∣ ψ ⟩ C |\psi\rangle_C ∣ψ⟩C 和纠缠粒子A
- Bob:信息接收方,拥有纠缠粒子B
- 预先共享的纠缠对:粒子A和B处于贝尔态 ∣ Φ + ⟩ = ∣ 00 ⟩ + ∣ 11 ⟩ 2 |\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}} ∣Φ+⟩=2∣00⟩+∣11⟩
整个系统初始状态为:
∣ Ψ 0 ⟩ = ∣ Φ + ⟩ A B ⊗ ∣ ψ ⟩ C = ∣ 00 ⟩ A B + ∣ 11 ⟩ A B 2 ⊗ ( α ∣ 0 ⟩ C + β ∣ 1 ⟩ C ) |\Psi_0\rangle = |\Phi^+\rangle_{AB} \otimes |\psi\rangle_C = \frac{|00\rangle_{AB} + |11\rangle_{AB}}{\sqrt{2}} \otimes (\alpha|0\rangle_C + \beta|1\rangle_C) ∣Ψ0⟩=∣Φ+⟩AB⊗∣ψ⟩C=2∣00⟩AB+∣11⟩AB⊗(α∣0⟩C+β∣1⟩C)
2.2 协议流程(四步走)
第一步:Alice对粒子C和A进行贝尔测量
将三个粒子的状态用A和C的贝尔基展开(详细推导见下节),Alice对A和C做贝尔态测量。测量有四种等概率的结果: ∣ Φ + ⟩ A C |\Phi^+\rangle_{AC} ∣Φ+⟩AC、 ∣ Φ − ⟩ A C |\Phi^-\rangle_{AC} ∣Φ−⟩AC、 ∣ Ψ + ⟩ A C |\Psi^+\rangle_{AC} ∣Ψ+⟩AC、 ∣ Ψ − ⟩ A C |\Psi^-\rangle_{AC} ∣Ψ−⟩AC,概率各1/4。
第二步:系统状态坍缩
测量后,整个系统的状态坍缩,Bob手中的粒子B会瞬间进入一个与测量结果相关的状态:
- 若Alice测得 ∣ Φ + ⟩ A C |\Phi^+\rangle_{AC} ∣Φ+⟩AC,则B处于 α ∣ 0 ⟩ + β ∣ 1 ⟩ \alpha|0\rangle + \beta|1\rangle α∣0⟩+β∣1⟩
- 若测得 ∣ Φ − ⟩ A C |\Phi^-\rangle_{AC} ∣Φ−⟩AC,则B处于 α ∣ 0 ⟩ − β ∣ 1 ⟩ \alpha|0\rangle - \beta|1\rangle α∣0⟩−β∣1⟩
- 若测得 ∣ Ψ + ⟩ A C |\Psi^+\rangle_{AC} ∣Ψ+⟩AC,则B处于 α ∣ 1 ⟩ + β ∣ 0 ⟩ \alpha|1\rangle + \beta|0\rangle α∣1⟩+β∣0⟩
- 若测得 ∣ Ψ − ⟩ A C |\Psi^-\rangle_{AC} ∣Ψ−⟩AC,则B处于 α ∣ 1 ⟩ − β ∣ 0 ⟩ \alpha|1\rangle - \beta|0\rangle α∣1⟩−β∣0⟩
第三步:经典通信
Alice通过经典信道(电话、互联网、光纤等)将她的测量结果(2比特信息)告诉Bob。
第四步:Bob执行恢复操作
Bob根据收到的信息,对粒子B施加相应的量子门:
| 测量结果 | 收到的比特 | Bob的操作 |
|---|---|---|
| ∣ Φ + ⟩ |\Phi^+\rangle ∣Φ+⟩ | 00 | 施加I(不变) |
| ∣ Φ − ⟩ |\Phi^-\rangle ∣Φ−⟩ | 01 | 施加Z门 |
| ∣ Ψ + ⟩ |\Psi^+\rangle ∣Ψ+⟩ | 10 | 施加X门 |
| ∣ Ψ − ⟩ |\Psi^-\rangle ∣Ψ−⟩ | 11 | 施加ZX门(先X后Z) |
经过这些操作,粒子B的状态精确地变成了Alice最初想要传输的 ∣ ψ ⟩ = α ∣ 0 ⟩ + β ∣ 1 ⟩ |\psi\rangle = \alpha|0\rangle + \beta|1\rangle ∣ψ⟩=α∣0⟩+β∣1⟩。
2.3 量子电路表示
完整的量子隐形传态电路如下:
q0: |ψ> ──■── H ── M ────║──── │ ║ ║ q1: |0> ──⊕──────── M ────║──── ║ ║ ║ q2: |0> ──H ──────────────⊕───Z─X─ (初始纠缠制备) (根据测量结果修正) 其中:
- 前两部分(H门和CNOT)制备纠缠对
- 中间虚线左侧是Alice的操作和测量
- 虚线右侧是Bob根据经典信息执行的修正操作
三、数学推导(进阶内容)
对于有一定线性代数基础的读者,我们来看看完整的数学推导。
3.1 初始态展开
将三个粒子的状态用A和C的贝尔基展开。四个贝尔基为:
∣ Φ + ⟩ A C = ∣ 00 ⟩ + ∣ 11 ⟩ 2 ∣ Φ − ⟩ A C = ∣ 00 ⟩ − ∣ 11 ⟩ 2 ∣ Ψ + ⟩ A C = ∣ 01 ⟩ + ∣ 10 ⟩ 2 ∣ Ψ − ⟩ A C = ∣ 01 ⟩ − ∣ 10 ⟩ 2 \begin{aligned} |\Phi^+\rangle_{AC} &= \frac{|00\rangle + |11\rangle}{\sqrt{2}} \\ |\Phi^-\rangle_{AC} &= \frac{|00\rangle - |11\rangle}{\sqrt{2}} \\ |\Psi^+\rangle_{AC} &= \frac{|01\rangle + |10\rangle}{\sqrt{2}} \\ |\Psi^-\rangle_{AC} &= \frac{|01\rangle - |10\rangle}{\sqrt{2}} \end{aligned} ∣Φ+⟩AC∣Φ−⟩AC∣Ψ+⟩AC∣Ψ−⟩AC=2∣00⟩+∣11⟩=2∣00⟩−∣11⟩=2∣01⟩+∣10⟩=2∣01⟩−∣10⟩
初始态 ∣ Ψ 0 ⟩ = ∣ 00 ⟩ A B + ∣ 11 ⟩ A B 2 ⊗ ( α ∣ 0 ⟩ C + β ∣ 1 ⟩ C ) |\Psi_0\rangle = \frac{|00\rangle_{AB} + |11\rangle_{AB}}{\sqrt{2}} \otimes (\alpha|0\rangle_C + \beta|1\rangle_C) ∣Ψ0⟩=2∣00⟩AB+∣11⟩AB⊗(α∣0⟩C+β∣1⟩C) 可以重写为:
∣ Ψ 0 ⟩ = 1 2 [ ∣ Φ + ⟩ A C ⊗ ( α ∣ 0 ⟩ B + β ∣ 1 ⟩ B ) + ∣ Φ − ⟩ A C ⊗ ( α ∣ 0 ⟩ B − β ∣ 1 ⟩ B ) + ∣ Ψ + ⟩ A C ⊗ ( α ∣ 1 ⟩ B + β ∣ 0 ⟩ B ) + ∣ Ψ − ⟩ A C ⊗ ( α ∣ 1 ⟩ B − β ∣ 0 ⟩ B ) ] |\Psi_0\rangle = \frac{1}{2} \left[ \begin{aligned} &|\Phi^+\rangle_{AC} \otimes (\alpha|0\rangle_B + \beta|1\rangle_B) \\+ &|\Phi^-\rangle_{AC} \otimes (\alpha|0\rangle_B - \beta|1\rangle_B) \\+ &|\Psi^+\rangle_{AC} \otimes (\alpha|1\rangle_B + \beta|0\rangle_B) \\+ &|\Psi^-\rangle_{AC} \otimes (\alpha|1\rangle_B - \beta|0\rangle_B) \end{aligned} \right] ∣Ψ0⟩=21+++∣Φ+⟩AC⊗(α∣0⟩B+β∣1⟩B)∣Φ−⟩AC⊗(α∣0⟩B−β∣1⟩B)∣Ψ+⟩AC⊗(α∣1⟩B+β∣0⟩B)∣Ψ−⟩AC⊗(α∣1⟩B−β∣0⟩B)
3.2 测量与坍缩
当Alice测量A和C得到某个贝尔态时,B立即坍缩到对应的状态。这正是量子纠缠的“心灵感应”在起作用。
3.3 经典通信与修正
Bob的修正操作本质上是将B的状态“旋转”回目标态。例如,当B处于 α ∣ 0 ⟩ − β ∣ 1 ⟩ \alpha|0\rangle - \beta|1\rangle α∣0⟩−β∣1⟩ 时,施加Z门( [ 1 0 0 − 1 ] \begin{bmatrix}1&0\\0&-1\end{bmatrix} [100−1])即可恢复。
四、为什么不能超光速?不能复制?
4.1 速度限制:经典信道是瓶颈
很多人误以为量子隐形传态可以实现“瞬间传输”。但关键在于:Bob必须等待Alice的经典信息才能完成恢复。
经典信息的传输受光速限制(光纤中约2/3光速)。因此,整个过程的总速度 ≤ 光速,无法实现超光速通信。正如郭光灿院士强调的:“既然必须采用经典通道传输信息,这个过程的实现决不可能超光速。”
4.2 不可克隆定理的保护
在传输过程中,粒子C的原始量子态被破坏(测量导致坍缩)。这意味着不可能出现“复制出多个相同量子态”的情况,与量子力学的不可克隆定理完美一致。
五、2025年最新实验突破
量子隐形传态已经从理论走向了令人振奋的实验应用。2025年,多个研究团队取得了里程碑式的进展:
5.1 深圳国际量子研究院:跨芯片量子隐形传态
俞大鹏院士团队在超导量子芯片之间实现了64米的远距离量子态传输,通过超低损耗微波通道,制备出保真度达94.2%的远程纠缠对,量子态隐形传态的平均过程保真度达到78.3%(远高于经典极限1/2)。
这是超导量子电路中首个跨芯片的远距离量子隐形传送实验,为分布式超导量子计算奠定了基础。
5.2 南京大学:全通信波段含存储的量子隐形传态
马小松、陆延青、祝世宁团队实现了通信波段光子与铒离子系综之间的量子隐形传态,量子态保真度达81.4%,过程保真度达73.6%,均超越经典极限。
这一成果首次将量子存储与通信波段结合起来,为实现广域量子网络奠定了关键基础。
5.3 空芯光纤信道验证
电子科技大学、四川电信等合作单位在国际上首次验证了基于空芯光纤信道的量子隐形传态。空芯光纤凭借其低时延、弱非线性及抗环境干扰等特性,成为实现量子隐形传态的潜在理想信道。
六、常见误解澄清
误解1:量子隐形传态可以传送人体
正解:人体包含约10^28个粒子,每个粒子的量子态都需要精确描述和传输。且不说生命、意识的复杂性,单是技术上的挑战——保持如此庞大系统的量子相干性、完成海量贝尔测量和经典通信——在可预见的未来都绝无可能。
误解2:量子隐形传态是瞬间完成的
正解:必须依赖经典信道传输测量结果,因此速度受光速限制,不可能“瞬时”。
误解3:量子隐形传态可以无限复制信息
正解:原始粒子的量子态在测量中被破坏,整个过程是“破坏性传输”,而非“复制”。
误解4:量子隐形传态已经可以大规模实用
正解:目前仅在实验室中实现单个或少量粒子的传态,距离大规模量子网络还有很长的路要走。量子纠缠的退相干问题仍是主要障碍。
七、未来展望:从量子隐形传态到量子互联网
量子隐形传态是构建量子互联网的核心技术之一。未来的量子网络将具备:
- 量子中继:克服光纤传输损耗,实现远距离量子通信
- 分布式量子计算:多个小型量子计算机通过隐形传态连接,突破单机规模限制
- 量子密钥分发网络:实现绝对安全的全球通信
2025年的这些突破表明,我们正在从“能否实现”走向“如何实用化”的新阶段。
八、动手实践:用Python模拟量子隐形传态
下面我们用NumPy模拟完整的量子隐形传态过程,验证协议的正确性。
import numpy as np # 定义基态 ket0 = np.array([[1],[0]]) ket1 = np.array([[0],[1]])# 定义门 I = np.eye(2) H =1/np.sqrt(2)* np.array([[1,1],[1,-1]]) X = np.array([[0,1],[1,0]]) Z = np.array([[1,0],[0,-1]])# CNOT门 (4x4) CNOT = np.array([[1,0,0,0],[0,1,0,0],[0,0,0,1],[0,0,1,0]])defteleport_simulation(alpha, beta):""" 模拟量子隐形传态 alpha, beta: 待传输态的参数 |ψ> = α|0> + β|1> """print(f"待传输态: |ψ> = {alpha:.3f}|0> + {beta:.3f}|1>")# 初始态 |0>|0>|0> (顺序: q2(B), q1(A), q0(C))# 注意:为方便CNOT操作,我们按 (B, A, C) 顺序排列 psi = np.kron(ket0, np.kron(ket0, ket0))# 步骤1:制备纠缠对 A-B (贝尔态 |Φ+>)# 对A应用H门 (在第二个位置) H_on_A = np.kron(np.eye(2), np.kron(H, np.eye(2))) psi = H_on_A @ psi # CNOT (控制A, 目标B)# 重排索引以便应用CNOT:我们需要一个操作,当A=1时翻转B# 这里简化:直接构造CNOT_AB矩阵 CNOT_AB = np.zeros((8,8))for i inrange(8): b =(i >>2)&1# 第2位 (B) a =(i >>1)&1# 第1位 (A) c = i &1# 第0位 (C)if a ==1: b_new = b ^1else: b_new = b j =(b_new <<2)|(a <<1)| c CNOT_AB[i, j]=1 psi = CNOT_AB @ psi # 此时A和B处于纠缠态,C携带待传输态# 步骤2:Alice对C和A进行操作# 首先对C应用H门 (在最低位) H_on_C = np.kron(np.eye(4), H) psi = H_on_C @ psi # CNOT (控制C, 目标A)# 构造 CNOT_CA CNOT_CA = np.zeros((8,8))for i inrange(8): b =(i >>2)&1 a =(i >>1)&1 c = i &1if c ==1: a_new = a ^1else: a_new = a j =(b <<2)|(a_new <<1)| c CNOT_CA[i, j]=1 psi = CNOT_CA @ psi # 步骤3:Alice测量C和A (模拟四种可能结果)print("\n模拟四种测量结果:") results =['00','01','10','11']for idx, res inenumerate(results): c_meas =int(res[1])# C是低位 a_meas =int(res[0])# A是高位# 构造投影算符 P_a = np.zeros((2,2)) P_a[a_meas, a_meas]=1 P_c = np.zeros((2,2)) P_c[c_meas, c_meas]=1 P_total = np.kron(np.eye(2), np.kron(P_a, P_c))# 投影并归一化 psi_collapsed = P_total @ psi norm = np.sqrt(np.sum(np.abs(psi_collapsed)**2))if norm <1e-10: prob =0else: psi_collapsed = psi_collapsed / norm prob = norm**2# 提取B的状态# B是最高位,索引4-7 b_state = psi_collapsed[4:]if a_meas ==0and c_meas ==0else \ (psi_collapsed[:4]if a_meas ==1and c_meas ==1else \ psi_collapsed[2:6]if a_meas ==0and c_meas ==1else \ psi_collapsed[2:6])# 简化:实际应根据测量结果重排 b_state = b_state / np.sqrt(np.sum(np.abs(b_state)**2))# Bob根据测量结果进行修正if res =='00': b_final = b_state elif res =='01':# 应用Z门 Z_on_B = np.kron(Z, np.eye(4)) b_final = Z_on_B @ b_state elif res =='10':# 应用X门 X_on_B = np.kron(X, np.eye(4)) b_final = X_on_B @ b_state else:# '11'# 应用ZX ZX_on_B = np.kron(Z @ X, np.eye(4)) b_final = ZX_on_B @ b_state # 提取B的系数 b0 = b_final[0] b1 = b_final[2]# 简化:忽略纠缠,只取第一个分量print(f"测量结果 {res} (概率 {prob:.3f}): B最终态 = {b0:.3f}|0> + {b1:.3f}|1>")# 测试:传输 |+> = (|0> + |1>)/√2 alpha =1/np.sqrt(2) beta =1/np.sqrt(2) teleport_simulation(alpha, beta)运行这段代码,你会看到无论Alice测得什么结果,经过Bob的修正后,B的最终状态都精确地恢复为 (\alpha|0\rangle + \beta|1\rangle)。
九、总结与展望
| 核心要点 | 总结 |
|---|---|
| 传输对象 | 量子态(信息),而非物质本身 |
| 关键资源 | 量子纠缠 + 经典通信 |
| 速度限制 | ≤ 光速(受经典信道限制) |
| 不可克隆 | 原始态被破坏,符合量子力学原理 |
| 最新进展 | 2025年实现64米跨芯片传态、通信波段含存储传态、空芯光纤验证 |
| 未来应用 | 量子互联网、分布式量子计算、量子中继 |
量子隐形传态是人类对自然规律深刻理解的结晶。它告诉我们:信息可以从一个地方“消失”,同时在另一个地方“重现”,而物质本身可以安然不动。这虽然不是科幻中的人体传送,但作为一种全新的信息传输方式,它正在开启量子信息时代的大门。
在下一篇文章中,我们将探索量子计算的另一个核心应用——Grover搜索算法,看看量子计算机如何在海量数据中“一眼”找到目标!
附:思考题
- 为什么量子隐形传态需要经典信道?能否只用量子信道完成?
- 如果Alice和Bob共享的纠缠对不是最大纠缠态(如 ( \sqrt{0.8}|00\rangle + \sqrt{0.2}|11\rangle )),协议还能成功吗?保真度会如何变化?
- 查阅2025年深圳国际量子研究院的论文,思考“确定性”量子隐形传态和“概率性”传态的区别。
欢迎在评论区分享你的思考和疑问!

🔍 Grover搜索算法:如何在海量数据中“一眼”找到目标
从图书馆找书到破解密码,量子搜索的平方加速奇迹
引言:无序数据库搜索问题
想象一下这样的场景:你走进一个藏有100万本书的图书馆,但这些书完全没有按照任何规则排序——不是按书名、不是按作者、甚至不是按大小。你想找到一本特定的书,比如《三体》。在经典世界里,你只能一本一本地检查,平均需要翻看50万本才能找到目标。这就是无序数据库搜索问题。
如果这个图书馆的藏书量再扩大100倍,变成1亿本,那么你需要检查的数量也会扩大100倍——经典算法的复杂度与数据规模呈线性增长。
但在量子世界,存在一种神奇的算法,可以在平方根级别的时间内找到目标。对于1亿本书,它只需要检查约1万次!这就是1996年由Lov Grover提出的Grover搜索算法,被誉为继Shor算法之后的第二大量子算法,也是第一个被完整实验实现的量子算法。
本文将带你深入理解:
- Grover算法的核心思想与数学原理
- 如何用量子电路实现搜索(附完整代码)
- 最新研究进展:从机器人定位到密码攻击
- 为什么它只能实现“平方加速”而非“指数加速”
一、问题建模:从数据库到量子态
1.1 数学描述
假设我们有一个包含 N N N 个元素的无序数据库,其中 M M M 个元素是我们想要找的目标。为简化问题,通常假设 N = 2 n N = 2^n N=2n,这样我们可以用 n n n 个量子比特来索引所有元素。
定义一个函数 f ( x ) f(x) f(x):
f ( x ) = { 1 , 如果 x 是目标 0 , 如果 x 不是目标 f(x) = \begin{cases} 1, & \text{如果 } x \text{ 是目标} \\ 0, & \text{如果 } x \text{ 不是目标} \end{cases} f(x)={1,0,如果 x 是目标如果 x 不是目标
我们的目标就是找到所有满足 f ( x ) = 1 f(x)=1 f(x)=1 的 x x x。
1.2 经典 vs 量子复杂度
| 算法类型 | 时间复杂度 | 查询次数(N=100万) |
|---|---|---|
| 经典暴力搜索 | O ( N ) O(N) O(N) | ~500,000次 |
| 经典优化搜索 | O ( N ) O(N) O(N) 仍需遍历 | 无法根本改善 |
| Grover量子搜索 | O ( N ) O(\sqrt{N}) O(N) | ~1,000次 |
Grover算法实现了二次加速(quadratic speedup)——虽然不如Shor算法的指数加速那样惊人,但它在广泛的问题领域都有应用,因为搜索是计算机科学中最基础的操作之一。
二、Grover算法的核心思想
Grover算法的精髓可以概括为四个字:振幅放大(amplitude amplification)。
2.1 直观理解
想象你有一堆抽奖券,其中只有一张是中奖的。经典方法是一张一张地翻开查看。量子方法则是:一开始让所有奖券处于叠加态(同时被翻开),然后通过一系列操作,让“中奖”那张奖券的概率幅不断放大,而其他奖券的概率幅不断缩小,最后测量时,几乎必然抽到中奖的那张。
这个过程就像荡秋千:每次迭代都给目标态“推”一把,让它越荡越高,直到达到最高点。
2.2 算法流程概览
Grover算法的核心步骤:
- 初始化:制备所有量子比特的均匀叠加态
∣ ψ 0 ⟩ = H ⊗ n ∣ 0 ⟩ ⊗ n = 1 N ∑ i = 0 N − 1 ∣ i ⟩ |\psi_0\rangle = H^{\otimes n}|0\rangle^{\otimes n} = \frac{1}{\sqrt{N}}\sum_{i=0}^{N-1}|i\rangle ∣ψ0⟩=H⊗n∣0⟩⊗n=N1i=0∑N−1∣i⟩ - Grover迭代(重复 (r) 次):
- Oracle操作:翻转目标态的相位(打上标记)
- 扩散操作:关于平均值的反演(放大标记态)
- 测量:以极高概率得到目标态
三、Grover迭代的数学原理
3.1 Oracle算子 U ω U_\omega Uω
Oracle的作用是“标记”目标态,给目标态加上一个负号:
U ω ∣ x ⟩ = { − ∣ x ⟩ , x = ω (目标) ∣ x ⟩ , x ≠ ω U_\omega|x\rangle = \begin{cases} -|x\rangle, & x = \omega \text{ (目标)} \\ |x\rangle, & x \neq \omega \end{cases} Uω∣x⟩={−∣x⟩,∣x⟩,x=ω (目标)x=ω
也可以统一写为:
U ω ∣ x ⟩ = ( − 1 ) f ( x ) ∣ x ⟩ U_\omega|x\rangle = (-1)^{f(x)}|x\rangle Uω∣x⟩=(−1)f(x)∣x⟩
在矩阵形式中,Oracle是一个对角矩阵,对角元为 ( − 1 ) f ( x ) (-1)^{f(x)} (−1)f(x)。
3.2 扩散算子 (D)
扩散算子 (D) 的作用是“关于平均值反演”。它的数学表达式为:
D = 2 ∣ ψ 0 ⟩ ⟨ ψ 0 ∣ − I D = 2|\psi_0\rangle\langle\psi_0| - I D=2∣ψ0⟩⟨ψ0∣−I
其中 ∣ ψ 0 ⟩ |\psi_0\rangle ∣ψ0⟩ 是初始均匀叠加态。扩散操作可以分解为:
- H ⊗ n H^{\otimes n} H⊗n(再次应用Hadamard门)
- 条件相移 P P P:将 ∣ 0 ⟩ |0\rangle ∣0⟩ 以外的态相位翻转
- 再次 H ⊗ n H^{\otimes n} H⊗n
3.3 几何解释
这是理解Grover算法最直观的方式。将整个状态空间分解为两个正交子空间:
- ∣ α ⟩ |\alpha\rangle ∣α⟩:所有非目标态的叠加
- ∣ β ⟩ |\beta\rangle ∣β⟩:所有目标态的叠加
初始态 ∣ ψ 0 ⟩ |\psi_0\rangle ∣ψ0⟩ 可以表示为:
∣ ψ 0 ⟩ = cos θ 2 ∣ α ⟩ + sin θ 2 ∣ β ⟩ |\psi_0\rangle = \cos\frac{\theta}{2}|\alpha\rangle + \sin\frac{\theta}{2}|\beta\rangle ∣ψ0⟩=cos2θ∣α⟩+sin2θ∣β⟩
其中 sin θ 2 = M N \sin\frac{\theta}{2} = \sqrt{\frac{M}{N}} sin2θ=NM。
Grover迭代的本质:每次迭代将态矢量向 ∣ β ⟩ |\beta\rangle ∣β⟩ 方向旋转 2 θ 2\theta 2θ 角度。经过 r r r 次迭代后,态矢量与 ∣ β ⟩ |\beta\rangle ∣β⟩ 的夹角为 π 2 − θ \frac{\pi}{2} - \theta 2π−θ。
3.4 迭代次数公式
最优迭代次数为:
r = ⌊ π 4 N M ⌋ r = \left\lfloor \frac{\pi}{4} \sqrt{\frac{N}{M}} \right\rfloor r=⌊4πMN⌋
当 M ≪ N M \ll N M≪N 时, r ≈ π 4 N r \approx \frac{\pi}{4}\sqrt{N} r≈4πN。这就是 O ( N ) \mathcal{O}(\sqrt{N}) O(N) 复杂度的来源。
迭代次数至关重要:太少则目标态概率不够大,太多则会“荡过”目标,概率反而下降。
四、Grover算法的量子电路
4.1 完整电路图
┌─────┐┌─────┐ ┌─────┐ q0: ─┤ H ├┤ ├─ ... ──┤ ├─ M ├─────┤│ │ │ │ q1: ─┤ H ├┤ G ├─ ... ─┤ G ├─ M ├─────┤│ │ │ │ q2: ─┤ H ├┤ ├─ ... ─┤ ├─ M └─────┘└─────┘ └─────┘ 初始化 Grover迭代(r次) 测量 其中 G G G算子 = H ⊗ n ⋅ P ⋅ H ⊗ n ⋅ U ω H^{\otimes n} \cdot P \cdot H^{\otimes n} \cdot U_\omega H⊗n⋅P⋅H⊗n⋅Uω。
4.2 3量子比特实例(单目标)
假设 n = 3 n=3 n=3, N = 8 N=8 N=8,目标态为 ∣ 5 ⟩ = ∣ 101 ⟩ |5\rangle = |101\rangle ∣5⟩=∣101⟩。
import numpy as np from qiskit import QuantumCircuit, Aer, execute from qiskit.visualization import plot_histogram # 创建3量子比特电路 qc = QuantumCircuit(3,3)# 步骤1:初始化均匀叠加 qc.h([0,1,2])# 步骤2:Grover迭代(最优次数 r=2)for _ inrange(2):# Oracle:标记 |101> qc.x(1)# 将中间比特翻转,使得 |101> 变成 |111> qc.h(2) qc.ccx(0,1,2)# 三重控制非门(Toffoli) qc.h(2) qc.x(1)# 扩散算子 qc.h([0,1,2]) qc.x([0,1,2]) qc.h(2) qc.ccx(0,1,2) qc.h(2) qc.x([0,1,2]) qc.h([0,1,2])# 步骤3:测量 qc.measure([0,1,2],[0,1,2])# 模拟运行 backend = Aer.get_backend('qasm_simulator') job = execute(qc, backend, shots=1000) result = job.result() counts = result.get_counts(qc)print(counts) plot_histogram(counts)运行结果应显示 ∣ 101 ⟩ |101\rangle ∣101⟩ 的概率远高于其他态(约95%)。
五、2025-2026年最新研究进展
5.1 电路优化:更少门、更高精度
2025年,Kumar等人在《Chinese Journal of Physics》发表的研究提出了一种优化Grover算法的方法,通过使用 R y ( ϕ ) R_y(\phi) Ry(ϕ) 门替代部分标准门组合,实现了:
- 门数量减少47%
- 电路深度降低49%
- 平均精度提升20%
这对于在噪声中型量子(NISQ)设备上实现Grover算法至关重要。
5.2 更大规模的实现
德国Helmholtz-Zentrum Dresden-Rossendorf的研究团队在2026年展示了5量子比特和6量子比特的Grover算法可扩展实现,搜索成功率超过90%。这标志着Grover算法正从原理验证走向更大规模的实用化。
5.3 实际应用:机器人定位
2025年《Robotics and Autonomous Systems》发表的研究将Grover算法应用于移动机器人定位问题。传统自适应蒙特卡洛定位(AMCL)算法的计算复杂度与地图网格面积成正比,而基于Grover的方法在2D地图中实现了显著加速。尽管当前量子硬件仍有局限,但这项研究展示了量子算法在机器人领域的巨大潜力。
5.4 密码学应用:攻击流密码
2026年1月,Chakraborty和Islam在IACR ePrint上发表了利用Grover算法攻击Atom流密码的研究。他们提出了完整的量子门级电路设计,并在3量子比特规模上实现了密钥恢复(成功率>90%)。研究结论认为Atom满足NIST Level 1安全要求——这意味着要破解128位密钥需要约2^64次Grover迭代,在当前技术下仍不可行,但为未来量子威胁评估提供了重要参考。
5.5 硬件评估:从84秒到5秒
IEEE 2025年的一项研究评估了在IBM量子硬件上执行Grover算法的可行性。结果显示,通过优化,3量子比特Grover算法的执行时间从84.33秒降低到仅5秒,展示了量子硬件性能的快速提升。
六、Grover算法的应用领域
| 应用领域 | 具体问题 | 量子优势 |
|---|---|---|
| 密码学 | 密钥穷举搜索 | 将2n搜索降为2(n/2) |
| 数据库搜索 | 无序数据库查询 | √N vs N |
| 图论 | 图着色问题 | 加速NP-完全问题的求解 |
| 机器人学 | 定位与路径规划 | 加速地图匹配 |
| 优化问题 | 约束满足 | 振幅放大提供通用加速 |
6.1 对密码学的深远影响
Grover算法对对称密码的影响最为直接:
- AES-128:Grover攻击后约需2^64次量子操作,NIST认为仍安全但需警惕
- AES-256:需2^128次,完全安全
- SHA-2/3:哈希函数碰撞搜索也可用Grover加速
这就是为什么后量子密码标准提升了密钥长度要求。
七、Grover算法的局限与误解
7.1 为什么不是指数加速?
Grover算法只能实现平方加速,而非指数加速。这已被证明是最优的——Bennett等人在1997年证明,对于非结构化搜索问题,任何量子算法至少需要 Ω ( N ) \Omega(\sqrt{N}) Ω(N) 次查询。
7.2 常见误解
| 误解 | 真相 |
|---|---|
| Grover可以瞬间找到答案 | 仍需 N \sqrt{N} N 次迭代,只是比经典快 |
| Grover适用于任何搜索 | 只适用于无结构搜索;有结构的问题可用更快的算法 |
| Grover可以破解所有密码 | 只对对称密码有效,公钥密码(如RSA)受Shor算法威胁更大 |
| 迭代次数越多越好 | 有最优次数,过犹不及 |
7.3 实际挑战
在真实量子硬件上实现Grover算法面临:
- 量子退相干:长电路容易出错
- 门保真度:多比特门误差累积
- Oracle实现复杂度:有些问题的Oracle本身构造困难
八、动手实践:用Python模拟Grover算法
下面我们用NumPy实现完整的Grover算法模拟,不依赖量子硬件,但能清晰展示振幅放大的过程。
import numpy as np import matplotlib.pyplot as plt defgrover_simulation(n_qubits, target, n_iterations=None):""" 模拟Grover搜索算法 参数: n_qubits: 量子比特数 (N = 2^n_qubits) target: 目标态索引 (0 ~ N-1) n_iterations: 迭代次数,若为None则使用最优次数 """ N =2**n_qubits # 初始化:均匀叠加态 psi = np.ones(N)/ np.sqrt(N)# 确定最优迭代次数if n_iterations isNone: n_iterations =int(np.pi/4* np.sqrt(N))print(f"数据库规模: {N}, 目标态: |{target}>")print(f"迭代次数: {n_iterations}")# 记录每次迭代后的目标态概率 prob_history =[]for iter_idx inrange(n_iterations):# Oracle操作:翻转目标态的相位 psi[target]=-psi[target]# 扩散操作:关于平均值反演 avg = np.mean(psi) psi =2*avg - psi # 计算当前目标态概率 prob = np.abs(psi[target])**2 prob_history.append(prob)print(f"迭代 {iter_idx+1}: 目标态概率 = {prob:.4f}")# 测量结果 measured = np.random.choice(N, p=np.abs(psi)**2)print(f"\n测量结果: |{measured}>, 是否为目标: {measured == target}")return prob_history # 测试:3量子比特,目标态为5 n_qubits =3 target =5# |101> prob_hist = grover_simulation(n_qubits, target)# 绘制概率变化曲线 plt.figure(figsize=(10,6)) plt.plot(range(1,len(prob_hist)+1), prob_hist,'bo-') plt.axhline(y=1, color='r', linestyle='--', label='理想概率=1') plt.xlabel('迭代次数') plt.ylabel('目标态概率') plt.title('Grover算法:目标态概率随迭代次数的变化') plt.grid(True) plt.legend() plt.show()运行这段代码,你会看到目标态的概率从初始的 1 / N 1/N 1/N(12.5%)逐渐增长,在最优迭代次数附近达到峰值(约95%),然后下降——完美验证了Grover迭代的“荡秋千”效应。
九、总结与展望
9.1 核心要点
| 概念 | 总结 |
|---|---|
| 问题类型 | 无序数据库搜索 |
| 经典复杂度 | O ( N ) O(N) O(N) |
| 量子复杂度 | O ( N ) O(\sqrt{N}) O(N) |
| 核心机制 | 振幅放大(Oracle + 扩散算子) |
| 几何解释 | 态矢量在二维空间旋转 |
| 最优迭代 | ⌊ π 4 N M ⌋ \lfloor \frac{\pi}{4} \sqrt{\frac{N}{M}} \rfloor ⌊4πMN⌋ |
9.2 未来展望
随着量子硬件的发展,Grover算法将在以下领域发挥更大作用:
- 更优的Oracle设计:降低实现复杂度
- 错误缓解技术:在NISQ设备上实现更深电路
- 混合量子-经典算法:结合经典启发式搜索与量子振幅放大
- 量子机器学习:加速模型训练中的搜索子程序
Grover算法告诉我们:即使是“一眼”找到目标这样的直觉行为,在量子世界中也有严谨的数学原理支撑。它不是魔法,而是人类对自然规律深刻理解后的智慧结晶。
在下一篇文章中,我们将探索量子计算的“皇冠明珠”——Shor算法,看看量子计算机如何破解RSA密码!
附:思考题
- 如果数据库中有多个目标( M > 1 M>1 M>1),Grover算法的迭代次数公式应如何调整?
- 为什么Grover算法不能超过 N \sqrt{N} N的最优下限?(提示:查询复杂度的下界理论)
- 查阅资料,思考如何构造一个量子Oracle来实现图着色问题的验证。
欢迎在评论区分享你的思考和疑问!
下期预告:Shor算法——当量子计算机破解RSA密码
参考:[1] MindSpore Quantum [2] Robotics and Autonomous Systems 2025 [3] HZDR 2026 [5] Chinese Journal of Physics 2025 [6] IACR ePrint 2026 [7] IEEE 2025 [8] IACR News [9] ZEEKLOG博客 [10] IEEE 2025
🔐 Shor算法:当量子计算机破解RSA密码
从数学难题到量子突破,RSA加密的“不灭神话”如何被颠覆
引言:密码学的“达摩克利斯之剑”
1994年,当彼得·秀尔(Peter Shor)在美国贝尔实验室提出他的量子算法时,恐怕连他自己都没想到,这个纯粹的数学发现会在此后30年间成为悬在全球密码学头顶的“达摩克利斯之剑”。
RSA加密——这个以三位发明者姓氏首字母命名的公钥加密体系,自1977年诞生以来一直是互联网安全的基石。无论是网上银行、电子邮件,还是HTTPS协议、数字货币钱包,都依赖于一个核心假设:对大整数进行质因数分解在经典计算机上是极其困难的。
例如,分解一个2048位的RSA密钥,经典计算机需要耗费数千年时间。但Shor算法在理论上仅需数小时。这种从指数级到多项式级的复杂度跨越,让微软研究院的Krysta Svore博士做出了那个著名的对比:
“破解RSA-2048密钥可能需要耗费传统电脑10亿年的时间,而量子计算机只需要100秒就可以完成。”
本文将带你深入理解:
- Shor算法如何将因数分解转化为周期寻找问题
- 量子傅里叶变换(QFT)如何实现指数级加速
- 2025-2026年最新研究进展:Regev改进方案被无条件证明
- 当前量子硬件实现Shor算法的真实差距
一、问题转化:从因数分解到周期寻找
1.1 RSA的安全性来源
RSA算法的安全性建立在这样一个事实上:给定两个大质数 p p p 和 q q q,计算它们的乘积 N = p × q N = p \times q N=p×q 非常容易;但给定 N N N,反过来找到 p p p 和 q q q 极其困难。
经典计算机解决这个问题的算法(如普通数域筛选法)时间复杂度为 O ( e ( log N ) 1 / 3 ) O(e^{(\log N)^{1/3}}) O(e(logN)1/3),随着 N N N位数增加呈指数级增长。
1.2 Shor的天才转化
Shor算法的关键洞察在于:将因数分解问题转化为求阶问题(Order-Finding Problem)。
对于给定整数 N N N 和与 N N N互质的整数 a a a,若存在最小正整数 r r r 使得:
a r ≡ 1 ( m o d N ) a^r \equiv 1 \pmod{N} ar≡1(modN)
则 r r r 称为 a a a模 N N N 的阶。
一旦找到 r r r,就可以利用数学定理推导出 N N N 的因数。具体步骤如下:
- 随机选取 1 < a < N 1 < a < N 1<a<N,计算 gcd ( a , N ) \gcd(a, N) gcd(a,N)。若 gcd ( a , N ) > 1 \gcd(a, N) > 1 gcd(a,N)>1,则已找到因子
- 否则,找到 a a a 模 N N N 的阶 r r r
- 若 r r r是偶数且 a r / 2 ≢ ± 1 ( m o d N ) a^{r/2} \not\equiv \pm 1 \pmod{N} ar/2≡±1(modN),则计算 gcd ( a r / 2 − 1 , N ) \gcd(a^{r/2} - 1, N) gcd(ar/2−1,N),得到 N N N 的一个非平凡因子
示例:对于 N = 15 N=15 N=15,随机选取 a = 7 a=7 a=7,则 7 4 ≡ 1 ( m o d 15 ) 7^4 \equiv 1 \pmod{15} 74≡1(mod15),因此 r = 4 r=4 r=4。计算 gcd ( 7 4 / 2 − 1 , 15 ) = gcd ( 48 , 15 ) = 3 \gcd(7^{4/2} - 1, 15) = \gcd(48, 15) = 3 gcd(74/2−1,15)=gcd(48,15)=3,得到因子3。
1.3 为什么量子计算机能高效找到周期?
问题的核心在于:经典计算机无法高效找到周期。要找到 a a a 的阶 r r r,经典算法需要逐一尝试 a 1 , a 2 , a 3 , … a^1, a^2, a^3, \dots a1,a2,a3,… 直到找到满足条件的幂次,这本质上仍然是穷举搜索。
而量子计算机利用叠加态和量子傅里叶变换,可以同时计算所有可能的幂次,并在一次测量中提取出周期信息。
二、Shor算法的五步流程
Shor算法的精妙之处在于:只有一步需要量子计算机,其余步骤都可以在经典计算机上完成。
| 步骤 | 名称 | 执行平台 | 描述 |
|---|---|---|---|
| 第一步 | 预处理 | 经典 | 随机选取 a a a,检查是否已找到因子 |
| 第二步 | 周期寻找 | 量子 | 用量子电路计算 a a a 的阶 r r r |
| 第三步 | 后处理 | 经典 | 检查 r r r 是否为奇数,若是则回到第一步 |
| 第四步 | 验证 | 经典 | 检验 a r / 2 ≢ ± 1 ( m o d N ) a^{r/2} \not\equiv \pm 1 \pmod{N} ar/2≡±1(modN) |
| 第五步 | 计算因子 | 经典 | 计算 gcd ( a r / 2 − 1 , N ) \gcd(a^{r/2} - 1, N) gcd(ar/2−1,N) 得到因子 |
第二步的核心:量子周期寻找
量子寻找周期的电路包含三个关键部分:
- 初始化叠加态:对第一个寄存器应用Hadamard门,创建所有可能输入值的叠加
1 2 n ∑ x = 0 2 n − 1 ∣ x ⟩ ∣ 0 ⟩ \frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1} |x\rangle |0\rangle 2n1x=0∑2n−1∣x⟩∣0⟩ - 量子并行计算:通过受控模幂运算,同时计算 a x m o d N a^x \bmod N axmodN 并存储在第二个寄存器
1 2 n ∑ x = 0 2 n − 1 ∣ x ⟩ ∣ a x m o d N ⟩ \frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1} |x\rangle |a^x \bmod N\rangle 2n1x=0∑2n−1∣x⟩∣axmodN⟩ - 量子傅里叶变换:对第一个寄存器应用逆量子傅里叶变换(QFT⁻¹),提取周期信息
测量第一个寄存器后,通过经典连分数算法即可得到周期 r r r。
三、为什么量子计算机能实现指数加速?
3.1 量子傅里叶变换(QFT)的魔力
量子傅里叶变换是Shor算法的核心引擎。与传统傅里叶变换类似,QFT可以将时域信号转换为频域信号——在这里,“时域”就是序列 a x m o d N a^x \bmod N axmodN,“频域”就是周期信息。
QFT的关键优势在于:它可以在量子叠加态上以指数级速度完成变换。对于 n n n 个量子比特,经典傅里叶变换需要 O ( n 2 n ) O(n2^n) O(n2n) 次操作,而QFT只需要 O ( n 2 ) O(n^2) O(n2) 个量子门——这正是量子加速的数学根源。
3.2 量子并行性:不是“同时尝试所有可能”
需要澄清一个常见误解:Shor算法并不是同时尝试所有可能的因子。它利用的是函数叠加:
“这提供了一次演化出叠加函数的可能性。实际上,这意味着它可以同时尝试 p p p 的所有功能。”
通过量子并行计算,算法能够在一个步骤中计算出所有 a x m o d N a^x \bmod N axmodN 的值,然后通过QFT提取出这些值中隐藏的周期性结构。这种能力是经典计算机无法复制的。
四、2025-2026年最新研究进展
4.1 Regev改进方案被无条件证明
2023年,Oded Regev提出了Shor算法的多维变体,将量子门数量从 O ( n 2 ) O(n^2) O(n2) 降至 O ( n 1.5 ) O(n^{1.5}) O(n1.5)。这一改进被业内专家评价为30年来对Shor算法的首次重大突破。
然而,Regev的原始算法依赖于一个数论猜想。2026年2月,牛津大学的Cédric Pilatte在《Forum of Mathematics, Pi》上发表论文,利用解析数论中的零密度估计证明了该猜想。这意味着:
- Regev算法的正确性得到无条件证明
- 量子门复杂度: O ( n 3 / 2 log 3 n ) O(n^{3/2} \log^3 n) O(n3/2log3n)
- 量子比特数: O ( n log 3 n ) O(n \log^3 n) O(nlog3n)
- 需调用量子电路 O ( n ) O(\sqrt{n}) O(n) 次
4.2 离散对数问题的扩展
Pilatte的工作同时证明了Ekerå和Gärtner对离散对数问题的改进方案,使得Shor算法在椭圆曲线密码(ECC)上的应用也得到优化。对于256位椭圆曲线,最新估计仅需1098个逻辑量子比特即可破解。
4.3 当前量子硬件的实现差距
尽管理论进展喜人,实际量子硬件距离破解RSA仍有巨大差距。2025年的一项研究在多个云端量子计算机上执行Shor算法,结果显示:
- 电路构建对每个被分解的模数都高度特化
- 机器保真度不稳定,错误率高且波动大
- 在模拟器上成功执行的代码,在离子阱和中性原子系统上因电路转译失败而无法运行
研究人员强调:理论预测与当前能力之间存在显著差距,要实现密码学相关整数的分解,需要硬件稳定性和算法灵活性的实质性改进。
4.4 硬件需求评估
2026年的一项研究表明,使用表面码实现Shor算法分解21需要:
- 控制器-解码器闭环延迟需保持在几十微秒内
- 物理错误率约0.1%
- 约1000个量子比特
这一规模在近中期是可行的,但距离破解2048位RSA所需的数百万逻辑量子比特仍有距离。
五、Shor算法对密码学的深远影响
5.1 公钥加密体系的威胁
| 密码系统 | 依赖问题 | Shor算法影响 |
|---|---|---|
| RSA | 大整数分解 | 可直接破解 |
| Diffie-Hellman | 离散对数 | 可直接破解 |
| ECC(椭圆曲线) | 椭圆曲线离散对数 | 可直接破解 |
| DSA | 离散对数 | 可直接破解 |
5.2 对密钥长度的“安全错觉”
一个常见误区是:加倍密钥长度能否抵御量子攻击?
对于RSA-2048,经典破解需10亿年,量子破解只需100秒。即便将密钥长度翻倍到4096位,Shor算法的复杂度也仅从 O ( n 2 ) O(n^2) O(n2) 增加到 O ( ( 2 n ) 2 ) = 4 O ( n 2 ) O((2n)^2) = 4O(n^2) O((2n)2)=4O(n2)——这不过是常数倍的差异,完全无法弥补指数级加速带来的颠覆。
5.3 “先窃取,后解密”威胁
当前加密存储的数据(如医疗记录、政府文件)可能在未来量子计算机成熟后被回溯破解。例如,某金融机构2020年加密的客户信息,可能在2040年被量子计算机轻松解密。这种“先窃取,后解密”(Harvest Now, Decrypt Later)的威胁已引起各国高度重视。
5.4 后量子密码学的崛起
为应对Shor算法的威胁,全球正加速研发抗量子加密方案:
- 基于格的密码学(Lattice-Based):如NTRU、Kyber
- 基于哈希的签名(Hash-Based):如SPHINCS+
- 基于编码的密码(Code-Based):如McEliece
美国国家标准与技术研究院(NIST)已启动后量子密码标准制定,预计2025年公布最终候选算法。
六、动手实践:用Qiskit模拟Shor算法(分解15)
下面我们用Qiskit模拟Shor算法最经典的例子——分解15。这是2001年IBM团队首次实验演示的实例。
import numpy as np from qiskit import QuantumCircuit, Aer, execute from qiskit.visualization import plot_histogram from math import gcd defshor_15():""" 模拟Shor算法分解15 目标:找到a=7的阶r=4 """# 参数设置 N =15# 待分解数 a =7# 随机选择的互质数print(f"分解 N = {N}, 选择 a = {a}")# 验证a与N互质if gcd(a, N)!=1:print(f"幸运地找到因子: gcd({a}, {N}) = {gcd(a, N)}")return# 创建量子电路# 第一个寄存器:计数寄存器(3比特足够,因为需要2^n > N^2)# 第二个寄存器:辅助寄存器(4比特,存储a^x mod 15) qc = QuantumCircuit(7,3)# 第一步:初始化叠加态 qc.h([0,1,2])# 对计数寄存器应用Hadamard# 第二步:量子并行计算 a^x mod 15# 对于a=7,模15的幂次循环为:7, 4, 13, 1, 7, ...# 我们通过受控模乘实现# 注意:这里为了教学简化,直接实现已知结果# 实际Shor算法需要通用的模幂电路# 简化:模拟7^x mod 15的结果# 当x=0: 7^0=1 -> |001># 当x=1: 7^1=7 -> |111># 当x=2: 7^2=49 mod 15=4 -> |100># 当x=3: 7^3=343 mod 15=13 -> |1101># 当x=4: 7^4=2401 mod 15=1 -> |001># 用受控X门实现映射(简化版)for i inrange(3):# x的每一位控制# 当x=1 (001) 时,输出7 (0111) qc.ccx(0,1,3)# 简化示意,实际需要完整电路# 第三步:逆量子傅里叶变换(QFT⁻¹)# 对3比特计数寄存器应用逆QFT qc.swap(0,2) qc.h(2) qc.cp(-np.pi/2,1,2) qc.h(1) qc.cp(-np.pi/4,0,2) qc.cp(-np.pi/2,0,1) qc.h(0)# 第四步:测量计数寄存器 qc.measure([0,1,2],[0,1,2])# 模拟运行 backend = Aer.get_backend('qasm_simulator') job = execute(qc, backend, shots=1024) result = job.result() counts = result.get_counts(qc)print("测量结果分布:")for outcome, count in counts.items():print(f"|{outcome}>: {count} 次")# 经典后处理:从测量结果恢复周期r# 测量结果应该是 0, 256, 512, 768 附近(对应周期4)print("\n后处理:")print("测量值应该接近 0, 256, 512, 768(对应周期4)")print("从周期r=4可得:gcd(7^(4/2)-1, 15) = gcd(48, 15) = 3")print("因此,15 = 3 × 5")return counts # 运行模拟 counts = shor_15()# 绘制结果直方图 plot_histogram(counts)运行结果解读:测量结果会集中在 0 , 256 , 512 , 768 0, 256, 512, 768 0,256,512,768 附近,对应周期 r = 4 r=4 r=4。通过经典后处理即可得到因子3和5。
七、总结与展望
7.1 核心要点回顾
| 概念 | 总结 |
|---|---|
| 核心思想 | 将因数分解转化为周期寻找问题 |
| 量子优势 | 量子叠加 + 量子傅里叶变换实现指数级加速 |
| 算法流程 | 五步中仅一步需要量子计算机 |
| 理论复杂度 | O ( ( log N ) 3 ) O((\log N)^3) O((logN)3)(原版)或 O ( ( log N ) 1.5 ) O((\log N)^{1.5}) O((logN)1.5)(Regev改进) |
| 硬件需求 | 破解RSA-2048需约百万逻辑量子比特 |
7.2 2026年最新突破
- Regev算法被无条件证明:牛津大学Cédric Pilatte证明Regev改进方案的数论猜想,量子门数量降至 O ( n 1.5 ) O(n^{1.5}) O(n1.5)
- ECC攻击优化:256位椭圆曲线仅需1098个逻辑量子比特
- 硬件评估:1000量子比特、0.1%错误率可执行小规模分解
7.3 未来展望
Shor算法的发展正在推动以下技术演进:
- 量子硬件突破:IBM计划2030年前推出百万量子比特的纠错量子计算机
- 后量子密码普及:NIST预计2025年公布最终标准,微软已在Azure中支持NTRU加密
- 混合加密过渡:未来十年,“量子-经典混合加密”可能成为主流
- 算法持续优化:更高效的模幂电路、更低深度的QFT实现
正如量旋科技的文章所言:“Shor算法不仅是一个数学工具,更是计算范式变革的缩影。它揭示了量子力学如何突破经典计算的极限,迫使我们重新定义‘安全’的内涵。”
在量子比特到后量子算法的这场技术博弈中,Shor算法永远是人类智慧的一座丰碑——它告诉我们,当数学与物理学相遇时,看似坚不可摧的城墙也可能被找到裂缝。
附:思考题
- 为什么Shor算法要求 a a a 与 N N N 互质?如果 gcd ( a , N ) > 1 \gcd(a, N) > 1 gcd(a,N)>1 会发生什么?
- 量子傅里叶变换(QFT)和经典傅里叶变换的根本区别是什么?
- 查阅资料,思考为什么RSA-2048需要数百万量子比特,而分解15只需要7个量子比特?
- Regev改进算法为何需要调用量子电路 O ( n ) O(\sqrt{n}) O(n) 次?这是否会影响其实际可行性?
欢迎在评论区分享你的思考和疑问!
系列结语:至此,我们完成了从量子力学基础到Shor算法的完整旅程。从“拆掉楼梯的大楼”到“鬼魅般的超距作用”,从Grover搜索到Shor破解RSA,量子计算的世界既神秘又精彩。希望这一系列文章能为你打开一扇通往量子信息科学的大门!
参考:[1] 量旋科技 [2] Quantum Zeitgeist [3] Cambridge University Press [4] ZEEKLOG博客 [5] FreeBuf [6] INSPIRE [7] 量旋科技优化报道 [8] ScienceDirect [9] IACR [10] 科普中国
1