激动人心的量子计算环节终于来了,其实我们在前11回书中已经完整的介绍了量子计算里面的基本概念,今天在介绍量子计算机的时候会回顾到不少;今天你会发现不知不觉你已经掌握了降龙十八掌前十七招,把这些招数都连起来你就发现,自己已经学会了量子计算机的基本原理,让我们一起走进量子计算机的大门!
学到现在我们会发现,量子比特的表达和操作其实我们都能用矩阵来表达,其实我们就可以用经典计算机来模拟量子计算,不过,量子比特是处于叠加态的,一个量子比特 ∣ ψ ⟩ = α ∣ 0 ⟩ + β ∣ 1 ⟩ |\psi\rangle=\alpha |0\rangle+\beta|1\rangle ∣ψ⟩=α∣0⟩+β∣1⟩的状态要用两个量子幅(Amplitude)来表达,对于 n n n个量子比特的状态 ∣ ψ ⟩ = ∑ x ∈ { 0 , 1 } n α x ∣ x ⟩ |\psi\rangle=\sum_{x\in\{0,1\}^n}\alpha_x|x\rangle ∣ψ⟩=∑x∈{0,1}nαx∣x⟩,由于量子纠缠(Entanglement)的存在,需要用 O ( 2 n ) O(2^n) O(2n)个量子幅来表达,如果没有纠缠, n n n个量子比特的状态可以由这 n n n个量子比特用张量积乘起来 ∣ ψ ⟩ = ∑ x ∈ { 0 , 1 } n α x ∣ x ⟩ = ( α 0 ∣ 0 ⟩ + β 0 ∣ 1 ⟩ ) ⊗ ( α 1 ∣ 0 ⟩ + β 1 ∣ 1 ⟩ ) … ( α n − 1 ∣ 0 ⟩ + β n − 1 ∣ 1 ⟩ ) |\psi\rangle=\sum_{x\in\{0,1\}^n}\alpha_x|x\rangle=(\alpha_0 |0\rangle+\beta_0|1\rangle)\otimes (\alpha_1 |0\rangle+\beta_1|1\rangle)\dots (\alpha_{n-1} |0\rangle+\beta_{n-1}|1\rangle) ∣ψ⟩=∑x∈{0,1}nαx∣x⟩=(α0∣0⟩+β0∣1⟩)⊗(α1∣0⟩+β1∣1⟩)…(αn−1∣0⟩+βn−1∣1⟩),这个时候用 O ( n ) O(n) O(n)个量子幅就可以表达了,那这个时候量子计算机说实话和经典计算机可以说区别不大了,因此在量子计算中几乎都要考虑量子纠缠。
顺便再提一句,指数复杂度是很可怕的,如果你有300个纠缠的量子比特,表达他们所需要的量子幅的个数已经比我们能观察到的宇宙中的原子数量还要多了。
费曼在1981年关于如何模拟量子力学的演讲中说过这么一句名言:
Nature isn’t classical, dammit, and if you want to make a simulation of nature, you’d better make it quantum mechanical, and by golly it’s a wonderful problem, because it doesn’t look so easy
反正意思就是,TMD,世界是量子的,如果你想用经典计算机模拟量子力学甚至量子化学量子生物的应用,不可避免的会遇到指数复杂度的问题,当然你可以想一些方法来hack,还有人因为hack的比较好拿到了诺贝尔奖,但是更自然的做法是应该能用量子计算机去模拟量子力学,那还是相当牛x的研究课题,因为这并没有那么简单。
而且后来人们还发现量子计算机还可以用来解决其它领域的问题,比如密码学,后面我们会学到,这就令人非常激动了!
David Deutsch认为多世界诠释是对的,即观察者也可以处于量子叠加态,虽然这与哥本哈根学派的观点不通,因为这样经典世界和量子世界就混到一起了;他想的是建造个具有意识的计算机,然后让它既考虑一个问题,又考虑另一个问题,即处于两种状态的叠加,比如:
∣ M 0 ⟩ + ∣ M 1 ⟩ 2 \frac{|M_0\rangle+|M_1\rangle}{\sqrt 2} 2∣M0⟩+∣M1⟩然后通过在基 { ∣ M 0 ⟩ + − ∣ M 1 ⟩ } \{|M_0\rangle +-|M_1\rangle\} {∣M0⟩+−∣M1⟩}的测量确保其处于叠加态,所以还是得建造量子计算机。
David Deutsch也有比Feynman厉害的时候,比如在复仇者联盟里面,不然就没法两次打败灭霸救活一半的宇宙生命惹~~~
当然量子计算机的想法肯定有很多人都构思过,这里只是挑俩影响力最大的来介绍一下。
量子计算机好像很牛x,那么我们到底能用量子计算机干啥呢?
很遗憾,答案是,不能;我们要牢记前面1.1里面的一句话,量子计算机能算的,经典计算机都能算,只不过要付出指数复杂度的代价,所以经典计算机里面讨论的不可计算问题,用量子计算机也无能为力,所以量子计算机符合 命题三(邱奇图灵命题)
目前,很少有问题可以用量子计算机进行指数加速;且当前的一种理解是指数加速是指数并行,比如叠加态同时计算俩结果,然后能同时计算指数个结果,这种思路虽然容易理解,但是并不是量子计算机的工作方式!很简单的理解,如果我们把若干量子比特分配一样的amplitude,最后不管叠加什么的,只能得到指数个均匀分布的测量结果,这并没有什么卵用;
其真正的工作方式是,通过量子幅值与经典概率的最大不同,即其是复数而不是非负实数,通过算法实现一定的干涉模式,使得坏的结果,他们的量子幅相加为零,而好的结果量子幅越加越大,由此尽可能大概率的得到我们想要的测量结果。
这些过程需要在不事先知道结果的情况下快速完成,这是大自然赋予我们的一个奇怪的工具,需要不断探索其到底能干啥。
在这里有三个概念:(1) 干涉 (Interference);(2) 指数级别的量子幅;(3) 纠缠 (Entanglement);
干涉是量子幅不同经典概率之处,量子幅的指数特点就不用说了,而纠缠是指数量子幅的原因,也是我们能利用的一个重点特点,这三个特点都会在量子计算中用到,算是理解量子计算的不同角度了。
经典计算机中,我们通常将其抽象为图灵机,其实就是无限长的纸带,然后通过读写头执行指令,来读取、改变纸带上的状态。那量子图灵机就把这些东西变成量子的,纸带写的是量子比特,读写头也是量子的。
一个比较modern的看法就是,量子计算机就是处理多个比特的量子电路,如图所示;
每个门电路都应该只作用在2、3个量子比特,因为:(1) 物理就是局部的; (2) 大的门可以由小的门组成;(3) 经典计算机电路也是一样的,只是由与(AND)或(OR)非(NOT)异或(XOR)这些小的逻辑电路组成;
在这里时间复杂度就是门的数量,如果考虑并行就是门的深度或者层数;空间复杂度就是量子比特的数量;
不过怎么确定哪些门作用在哪些量子比特上呢?当然是用经典计算机来算咯,经典计算机会把门序列发送到量子计算设备上,里面可能有激光啊光子啊啥的,让后返回一系列测量结果给经典计算机,由经典计算机来确定control flow,loops,memory allocation,when to halt。当然也可以尝试把这些工作也用量子计算机做,但是呢,Yao (1993)搞了个定理,证明这种经典+量子的计算模式,是和量子图灵机等价的。
那我们设计这些门电路时,到底该用哪些门备选呢?哪些门能实现所有的运算呢?这就涉及到通用门 Universal gate的概念啦,这个我们下次再说!
命题三(邱奇图灵命题),量子计算 1
量子幅(Amplitude),干涉(Interference),量子计算 2
量子纠缠(Entanglement),量子电路(Quantum circuits) 量子计算 3
多世界诠释(Many worlds interpretation),哥本哈根诠释(Copenhagen Interpretation),量子计算9