回頭看計算機的發展曆史,人們往往會慨歎科技的發展一日千裏,滄海桑田。通常我們把賓夕法尼亞大學1946年的那台ENIAC看成世界上的第一台電子計算機,不過當然,隨著各人對“計算機”這個概念的定義不同,人們也經常提到德國人Konrad Zu在1941年建造的Z3,伊阿華州立大學在二戰時建造的ABC(Atanasoff-Berry puter),或者圖靈小組為了破解德國密碼而建造的Collosus。不管怎麼樣,這些都是笨重的大家夥,體積可以裝滿整個房間,有的塞滿了難看的電子管,有的拖著長長的電線,輸入輸出都靠打孔的紙或者磁帶,和現代輕便精致的家庭電腦比起來,就好像美女與野獸的區別。但是,如果我們把看起來極為不同的這兩位從數學上理想化,美女和野獸在本質上卻是一樣的!不管是龐大的早期計算機,還是我們現在使用的PC,它們其實都可以簡化成這樣一種機器:它每次讀入一個輸入,並且視自己當時內態的不同,按照事先編好的一個規則表做出相應的操作:這操作可以是寫入輸出,或者是改變內態,或者幹脆什麼都不做乃至停機。這裏的關鍵是,我們機器的輸入和輸出可以是無限多的,但它的內態和規則表卻必須是有限的。這個模型其實也就是一切“計算機”的原型,由現代計算機的奠基人之一阿蘭·圖靈(Alan Turing)提出,也稱作“圖靈機”(The Turing Mae)。在圖靈的原始論文中,它被描述成某種匣子樣的東西,有一根無限長的紙帶貫穿其中,一端是作為輸入,另一端則是輸出。磁帶上記錄了信息,一般來說是0和1的序列。這台機器按照需要移動磁帶,從一端讀入數據,並且按照編好的規則表進行操作,最後在另一端輸出運算結果。
我們如今所使用的電腦,不管看上去有多精巧複雜,本質上也就是一種圖靈機。它讀入數據流,按照特定的算法來處理它,並在另一頭輸出結果。從這個意義上來講,奔騰4和286的區別隻不過是前者更快更有效率而已,但它們同樣做為圖靈機來說,所能做到的事情其實是一樣多的!我的意思是,假如給予286以足夠的時間和輸出空間(可以記錄暫時的儲存數據),奔騰機所能做到的它同樣可以做到。286已經太高級了,即使退化成圖靈機最原始的形式,也就是隻能向左或向右移動磁帶並做出相應行動的那台機器,它們所能解決的事情也是同樣多的,隻不過是快慢和效率的問題罷了。
對於傳統的計算機來說,1個“比特”(bit,binary digit的縮寫)是信息的最小單位。它要麼是0,要麼是1,對應於電路的開或關。假如一台計算機讀入了10個bits的信息,那相當於說它讀入了一個10位的2進製數(比方說1010101010),這個數的每一位都是一個確定的0或者1。這在人們看來,似乎是理所當然的。
但是,接下來就讓我們進入神奇的量子世界。一個bit是信息流中的最小單位,這看起來正如一個量子!我們回憶一下走過的路上所見到的那些奇怪景象,量子論最叫人困惑的是什麼呢?是不確定性。我們無法肯定地指出一個電子究竟在哪裏,我們不知道它是通過了左縫還是右縫,我們不知道薛定諤的貓是死了還是活著。根據量子論的基本方程,所有的可能性都是線性疊加在一起的!電子同時通過了左和右兩條縫,薛定諤的貓同時活著和死了。隻有當實際觀測它的時候,上帝才隨機地擲一下骰子,告訴我們一個確定的結果,或者他老人家不擲骰子,而是把我們投影到兩個不同的宇宙中去。
大家不要忘記,我們的電腦也是由微觀的原子組成的,它當然也服從量子定律(事實上所有的機器肯定都是服從量子論的,隻不過對於傳統的機器來說,它們的工作原理並不主要建立在量子效應上)。假如我們的信息由一個個電子來傳輸,我們規定,當一個電子是“左旋”的時候,它代表了0,當它是“右旋”的時候,則代表1(通常我們會以“上”和“下”來表示自旋方向,不過可能有讀者會對“上旋”感到困惑,我們換個稱呼,這無所謂)。現在問題來了,當我們的電子到達時,它是處於量子疊加態的。這豈不是說,它同時代表了0和1?
這就對了,在我們的量子計算機裏,一個bit不僅隻有0或者1的可能性,它更可以表示一個0和1的疊加!一個“比特”可以同時記錄0和1,我們把它稱作一個“量子比特”(qubit)。假如我們的量子計算機讀入了一個10qubits的信息,所得到的就不僅僅是一個10位的二進製數了,事實上,因為每個bit都處在0和1的疊加態,我們的計算機所處理的是210個10位數的疊加!
換句話說,同樣是讀入10bits的信息,傳統的計算機隻能處理1個10位的二進製數,而如果是量子計算機,則可以同時處理210個這樣的數!
利用量子演化來進行某種圖靈機式的計算早在70年代和80年代初便由Be,Benioff等人進行了初步的討論。到了1982年,那位極富傳奇色彩的美國物理學家理查德·費因曼(Richard Feynman)注意到,當我們試圖使用計算機來模擬某些物理過程,例如量子疊加的時候,計算量會隨著模擬對象的增加而指數式地增長,以致使得傳統的模擬很快變得不可能。費因曼並未因此感到氣餒,相反,他敏銳地想到,也許我們的計算機可以使用實際的量子過程來模擬物理現象!如果說模擬一個“疊加”需要很大的計算量的話,為什麼不用疊加本身去模擬它呢?每一個疊加都是一個不同的計算,當所有這些計算都最終完成之後,我們再對它進行某種幺正運算,把一個最終我們需要的答案投影到輸出中去。費因曼猜想,這在理論上是可行的,而他的確猜對了!