量子计算的原理
量子计算机可以比传统计算机快很多很多倍。它的原理并不神秘,这种计算能力的飞跃主要依赖于两个物理现象:
- 量子的叠加态
- 量子纠缠、观测和坍缩
通过这两种物理现象,一台量子计算机可以实现物理上的真正的并行计算,从而加速计算。
存储与计算
量子计算是经典计算机的延伸,因此我们首先要介绍一下经典计算机的基本运作方式,然后轻松地推广到量子计算机上面。
计算其实包含了两个方面的内容:
- 存储输入数据。经典计算机用 bit 来存储数据,一个 bit 可以存储 0 或者 1 两种状态其中的一个。N 个 bits 可以表达 2^N 种状态,但是在一个时刻只能存储一种状态。
- 对 bits 进行数学运算。把 bits 中存储的状态作为运算函数 f(x) 的输入,然后经过运算得到一个结果。例如,计算 bits 的和。
以上就是经典计算机的计算过程。需要注意的是,经典计算机的 bits 在一个时刻只能存储一种状态,计算函数 f(x)一次也只能计算一个状态。为了对所有 2^N 个状态计算结果,经典计算机需要计算 2^N 次。
叠加态与 Qubit
量子计算机中存储信息的基本单元是量子比特,英文叫 qubit,它也能存储 0 和 1 两种状态。与经典 bit 不同的是,qubit 是真的可以“同时”处于这两种状态,这就是量子的叠加态。但是,一旦进行“观测”,量子就会坍缩到某一个确定的状态。我们利用这个物理现象来对量子比特进行计算。
这是一个违反直觉的事实,但实验(量子双缝干涉)的确证明了,量子可以处于叠加态之中。这个时候,量子的本质是一个概率波,不能用粒子实体的概念去想象、描述。至于坍缩到哪个状态,取决于量子的概率分布。
这里是比较难以理解,并且存在着一定争议的地方。你可以理解为同时存在着 32 个平行宇宙。违反常识,但是这种状态的的确确存在,而且是叠加地存在着(具体的解释可以参考量子双缝干涉实验,以后我会写文章详细介绍)。
我们用 qubit 进行存储,N 个 qubit 可以同时存储 2^N 个状态。
更神奇的是,当你把一个函数 f(x) 应用到一个量子系统上的时候,你其实对 qubit 中所有的状态同时进行了计算(这在物理上是怎么实现的,以后可以专门写文章介绍,理解量子计算只需要接受这个事实即可)。因此对一个有 N 个 qubits 的量子系统,量子计算机可以同时对 2^N 种输入状态进行同时运算。相当于一个量子计算机等于 2^N 个传统计算机并行计算,加速了 2^N 倍。
理解上述内容是理解量子计算的关键。
一个具体的例子
我们从一个更具体的例子入手。
假设有 5 个人 a,b,c,d,e 要过河,你是码头老板,有两艘不同的船可以使用,每艘船额定载客量无限制。但是,这 5 个人分别来自 3 个国家:a 和 b 来自 A 国,c 来自 B 国。其中 A 和 B 是盟国,A 和 C 是敌国,B 和 C 是中立国。 当敌对国家的人在一艘船上的时候,容易产生冲突;盟友国家的国人在一艘船上则可以进行亲切而友好的交流。因此,你需要设计一种乘船方法,让同船的友好关系数量尽可能的多,而敌对关系数量尽可能的少(同国人坐在一条船上也算友好关系)。 由于每个人都可以有两艘船作为备选,5 个人互相独立,因此总共的组合方式有 2^5 = 32 种。一个传统的计算机可以用 5 个 bit 来存储下所有的状态。
我们同时也会定义一个函数 f(x)用来计算同船的友好关系和敌对关系,x 表示五个人的乘船状态。在这里 f(x)定义为友好关系数量减去敌对关系数量。经典计算机需要遍历 32 种状态完成计算。
假设我们现在让 5 个人乘坐同一艘船,那么盟友的关系就是 ab ac bc,而敌对关系则是 ad ae bd be,f(x) 得分为 3 - 4 = -1。
假设我们让 a b c 去 1 号船,d e 去 2 号船,那么友好关系是 ab ac bc de。敌对关系的数量是 0。因此这个组合的得分为 4 - 0 = 4 分,高于上一个组合。
依此类推,对每一种组合方式,我们都可以计算一个得分,然后找出最高值。
经典计算机为了获得最高的得分,必须对每一种可能存在的组合计算得分,然后选择得分最高的那个。由于有 32 个组合,一个经典计算机必须要遍历 32 种情况,也就是进行 32 次计算才能得到结果。
量子计算机就完全不同了,首先我们用 5 个 qubit 表示所有乘船情况,这 5 个 qubit 同时包含了所有的可能状态。
有了同时存储 32 种状态,接下来就是计算了?我们可以同时计算吗? 答案是:yes!
当我们对这个量子系统计算友好关系和敌对关系数目的时候,量子系统会同时对 32 种状态(或者叫世界)同时产生影响,然后输出结果。
也就是说,32 个平行世界的计算同时发生了,并且输出了结果。这个在物理上是通过“观测”实现的。(“观测”是量子力学里面最重要也是最玄学的概念之一,这里受到篇幅的限制并不展开,以后我也会写文章进行详细地解释)
上面举的例子相当简单,随着人数也就是 N 的增加,问题的难度迅速增加。5 个人只有 32 种情况,10 个人就有 1024 种情况,随着 N 的指数级增加,计算量很快就会超出传统计算机的解决能力。
这是因为,传统的计算机,在一个时刻只能存储一种状态,只能同时对一个状态进行计算。而依托于叠加态,量子计算机可以同时实现。
总结一下,量子计算的两大关键组成部分:
- 所有可能存在的状态,用 qubits 存储这些状态
- 一个计算函数 f(x),可以对每个状态计算一个分数。对 qubit 进行操作的时候,会对所有状态同时产生计算
不过,在实际的计算过程当中,量子计算机是会产生一定概率的错误的,不能 100% 地保证输出正确的答案。比如,它不一定会输出最大值,可能输出次优解,因此可能需要运行多次,然后挑选最好的或者统一的结果。