量子電路(quantum circuit)
量子電路是寫下一段量子程式最常見的方式。你可以把它想像成一張橫過來的樂譜:每個量子位元是一條水平的線,也就是一根導線,你從左到右讀它,就像時間在向前流動。沿著每根導線,你放上一個個畫成小方塊的閘,用來變換這些量子位元。在最右端,你通常會畫一個測量符號,在那裡你最終從每個量子位元讀出一個 0 或 1。所以一個電路其實就是一份配方:把量子位元準備在一個已知狀態(常常是 |0>),施加一串選定的閘,然後測量。
這些閘並不是隨意的亂攪。每一個都是可逆的么正操作,意思是原則上你可以把它倒著運行回去。有些閘只作用在一根導線上(比如 H 閘,它把一個量子位元放進 |0> 和 |1> 的均衡疊加態);另一些閘,比如 CNOT,橫跨兩根導線,可以讓它們糾纏起來,於是這兩個量子位元不再各自有獨立的故事。一小組閘,比如 {H, T, CNOT},是通用的:只要數量足夠,你就能以任意所需的精度,搭建出量子電腦能做的任何計算,就像少數幾種邏輯閘就足以搭起任何古典晶片一樣。
誠實的部分在於最後會發生什麼。如此用心地排列這些閘,整個目的就是讓錯誤答案的振幅相互抵消、讓正確答案的振幅彼此相加,這靠的是干涉,這樣當你測量時,你就很可能讀出有用的東西。電路並不會悄悄把每個答案都試一遍再把最好的遞給你;每跑一次,你只會得到一個隨機的結果,其權重由玻恩規則的機率決定,因此你通常要把這個電路重複跑很多次,才能看出其中的規律。把閘的順序設計成讓干涉偏向你想要的那個答案,這正是量子演算法設計中既困難又有趣的工作。
一個從左到右讀的雙導線電路:H 把 q0 放進疊加態,接著一個 CNOT(控制點在 q0,目標在 q1)讓兩者糾纏,最後兩個量子位元都被測量。
在今天的 NISQ 硬體上,每多加一個閘都會帶來一點雜訊,所以真實的電路必須保持淺而短;又長又深的電路將需要糾錯,而這種糾錯目前還無法做到大規模可用。