量子计算入门
在 IBM Bluemix 云平臺(tái)上開發(fā)并部署您的下一個(gè)應(yīng)用。
Alan Turing 在 1936 年發(fā)明可編程計(jì)算機(jī)(請(qǐng)參閱?參考資料)是作為一種思想實(shí)驗(yàn)以證明某些數(shù)學(xué)問題不可計(jì)算。在他的論證中,隱含的觀點(diǎn)是一臺(tái)裝有足夠資源的計(jì)算機(jī)能實(shí)現(xiàn)任何合理的算法。
從那時(shí)起,計(jì)算機(jī)工業(yè)不僅得以建造可編程計(jì)算機(jī)器,而且還通過每十八個(gè)月左右就使能力加倍,從而超越了它們自身。雖然計(jì)算機(jī)技術(shù)瘋狂的向前發(fā)展,但是現(xiàn)代計(jì)算機(jī)仍無法在難題方面取得顯著進(jìn)展。需要指數(shù)資源的問題(同問題本身的大小相比)在當(dāng)今仍然同 1936 年時(shí)一樣棘手。
1982 年 Richard Feynman 提出,值得尊敬的 Turing 機(jī)器的功能也許并沒有人們所想的那么強(qiáng)大。當(dāng)時(shí) Feynman 正在試圖用量子力學(xué)模擬 N 粒子之間的相互作用。盡管他很努力,但他沒能找到不使用指數(shù)資源的一般性解法。
然而不知為什么,大自然能僅使用 N 粒子模擬這一數(shù)學(xué)問題。結(jié)論是不可避免的:大自然具有建造非常高級(jí)的計(jì)算設(shè)備的能力,這說明 Turing 機(jī)器還不是人們從前所認(rèn)為的全能計(jì)算機(jī)。
使量子計(jì)算問題形象化
QC 算法涉及就概率因子進(jìn)行思考,對(duì)于現(xiàn)在的程序員而言,這是概念上的變化。在某些方面,這就象第一次卷入使用 OOP(面向?qū)ο缶幊谭椒?#xff09;、結(jié)構(gòu)化編程或多線程時(shí)概念上的轉(zhuǎn)變。從另一種角度來看,這種轉(zhuǎn)變更為重要,因?yàn)檫@使全新的一類(有可能)沒有替代物的問題開始出現(xiàn)了。
讓我們想象一下下面這個(gè)問題。我們要找一條路穿過一個(gè)復(fù)雜的迷宮。每次我們沿著一條路走,很快就會(huì)碰到新的岔路。即使知道出去的路,還是容易迷路。換句話說,有一個(gè)著名的走迷宮算法就是右手法則 - 順著右手邊的墻走,直到出去(包括繞過絕路)。這條路也許并不很短,但是至少您不會(huì)反復(fù)走相同的過道。以計(jì)算機(jī)術(shù)語表述,這條規(guī)則也可以稱作遞歸樹下行。
現(xiàn)在讓我們想象另外一種解決方案。站在迷宮入口,釋放足夠數(shù)量的著色氣體,以同時(shí)充滿迷宮的每條過道。讓一位合作者站在出口處。當(dāng)她看到一縷著色氣體出來時(shí),就向那些氣體粒子詢問它們走過的路徑。她詢問的第一個(gè)粒子走過的路徑最有可能是穿過迷宮的所有可能路徑中最短的一條。
當(dāng)然,氣體顆粒絕不會(huì)給我們講述它們的旅行。但是 QC 以一種同我們的方案非常類似的方式運(yùn)作。即,QC 先把整個(gè)問題空間填滿,然后只需費(fèi)心去問問正確的解決方案(把所有的絕路排除在答案空間以外)。
回頁首
qcl 量子計(jì)算機(jī)模擬器
在一臺(tái)傳統(tǒng)的經(jīng)典計(jì)算機(jī)上模擬量子計(jì)算機(jī)是個(gè)難題。需要的資源隨被模擬的量子內(nèi)存數(shù)量增加呈指數(shù)增長(zhǎng),以致于連模擬一臺(tái)只有幾十個(gè)量子位(quantum bit,qubit)的 QC 也遠(yuǎn)遠(yuǎn)超出了現(xiàn)在制造的任何一臺(tái)計(jì)算機(jī)的能力范圍。
qcl 只模擬非常小的量子計(jì)算機(jī),但幸運(yùn)的是,它的效力剛好足夠大,可以展示一些有用的 QC 算法背后的概念。
和過去的超級(jí)計(jì)算機(jī)一樣,未來的第一臺(tái) QC 的核心很可能由一些存儲(chǔ)和控制量子態(tài)機(jī)器的奇特硬件組成。其外圍將會(huì)是生命支持硬件以支援核心并把適當(dāng)?shù)木幊汰h(huán)境呈現(xiàn)給用戶。qcl 通過為經(jīng)典程序結(jié)構(gòu)提供量子數(shù)據(jù)類型及對(duì)其執(zhí)行操作的特殊函數(shù)來模擬這樣一種環(huán)境。
讓我們從一些經(jīng)典計(jì)算中常見的運(yùn)算開始使用 qcl。由于 qcl 是語法上模糊的類似于 C 的交互式解釋器,所以我們只要啟動(dòng)它就可以往里面輸入命令。為了使我們的示例更具可讀性,我們把被模擬的量子位數(shù)目限制為 5 位。
清單 1. 初始化 qcl 并轉(zhuǎn)存一個(gè)量子位
$ qcl --bits=5 [0/8] 1 |00000> qcl> qureg a[1]; qcl> dump a : SPECTRUM a: |....0> 1 |0>此處我們?cè)?qcl 量子堆中為一個(gè) 1 量子位(布爾型)變量分配空間。機(jī)器的量子態(tài)(?|00000>?)被初始化為全 0。符號(hào)?|>?表示這是量子態(tài)(有時(shí)也叫做 ket),而 5 個(gè) 0 的字符串(一個(gè) 0 代表量子堆中的一位)就形成該狀態(tài)的標(biāo)簽。這叫做量子力學(xué)的 Dirac 標(biāo)記法(也可以稱做 bra-ket)。同線性代數(shù)傳統(tǒng)的數(shù)學(xué)標(biāo)記法相比,其主要優(yōu)點(diǎn)是更易于輸入。
“qureg a[1]”為量子堆中的 1 位變量?a?分配空間。?dump a?命令給了我們一些關(guān)于?a?的信息。?SPECTRUM?行告訴我們?cè)诹孔佣阎蟹峙浣o?a?的量子位的位置;在這種情況下,?a?的 0 位是堆中右面第一位的量子位。下面一行告訴我們,如果我們要測(cè)量?a?,那么我們認(rèn)為“0”的概率為“1”。
當(dāng)然,因?yàn)?qcl 是一個(gè)模擬器,所以只是有可能能窺到量子內(nèi)存。只有不可撤回的改變值才能觀察到真正的量子位。后面還有更多這方面的內(nèi)容。
qcl 提供的基本量子運(yùn)算符中有許多在經(jīng)典計(jì)算中很常見。例如,?Not()?函數(shù)會(huì)把一位的值取反。
清單 2. 對(duì)一個(gè)量子位使用布爾型函數(shù)
qcl> Not(a); [2/8] 1 |00001>再次對(duì)同一量子位使用?Not()?將撤消第一次的結(jié)果,這正是我們?cè)诮?jīng)典計(jì)算中所預(yù)期的。
CNot(x,y)?運(yùn)算符測(cè)試 y 的值,如果是“1”,則對(duì) x 的值取反。等價(jià)于 C 中的?x^=y?語句。
清單 3. 其它一些量子位運(yùn)算符(CNot)
qcl> qureg b[2]; qcl> Not(b[1]); [3/8] 1 |00100> qcl> CNot(b[0], b[1]); [3/8] 1 |00110> qcl> dump b[0]; : SPECTRUM b[0]: |...0.> 1 |1> qcl> dump b[1]; : SPECTRUM b[1]: |..0..> 1 |1>CNot()?運(yùn)算符同?Not()?運(yùn)算符一樣,是它本身的逆。第二次應(yīng)用時(shí),它會(huì)把第一次的結(jié)果反過來,使您回到同開始時(shí)一樣的狀態(tài)。
可逆性觀點(diǎn)是理解量子計(jì)算的關(guān)鍵。理論物理學(xué)告訴我們對(duì)量子位進(jìn)行的所有操作(除了測(cè)量以外)必須可撤消。我們必須一直保留足夠的信息以復(fù)原任何操作。這意味著象賦值(x=y)、AND(?x&=y?)和 OR(?x|=y?)(在經(jīng)典計(jì)算中我們認(rèn)為這些運(yùn)算是理所當(dāng)然的)就必須為能在 QC 中使用而修改了。幸運(yùn)的是,有一個(gè)簡(jiǎn)單的方案可以把不可逆的經(jīng)典運(yùn)算轉(zhuǎn)換成量子運(yùn)算。
首先,除了要把量子位初始化為“0”,我們絕不重寫它。因此在我們本來可以進(jìn)行賦值(x=y)的地方,我們沒有這么做,而是把目標(biāo)初始化(x=0)并如同上面的示例一樣使用異或(x^=y)。
清單 4. 對(duì)布爾型 AND 進(jìn)行可逆模擬
nomadic$ qcl --bits=5 [0/8] 1 |00000> qcl> qureg c[3]; qcl> Not(c[1]); [3/8] 1 |00010> qcl> Not(c[2]); [3/8] 1 |00110> qcl> dump c : SPECTRUM c: |..210> 1 |110> qcl> CNot(c[0], c[1] & c[2]); [3/8] 1 |00111> qcl> dump c : SPECTRUM c: |..210> 1 |111>如果 y 和 z 的值都是“1”,?CNot(x, y & z)?會(huì)對(duì) x 的值取反。因此如果在開始前我們就把?x?初始化成“0”,那么這就象計(jì)算?y & z?并把值存到?x里。這是一個(gè)細(xì)微的區(qū)別,但卻是量子計(jì)算中的一個(gè)重要區(qū)別。
現(xiàn)在讓我們看看一些無經(jīng)典類似情況的運(yùn)算。最引人注目的,同時(shí)也是最有用的其中之一就是 Hadamard 函數(shù),qcl 把它恰當(dāng)?shù)臉?biāo)記為?Mix()。?Mix()?把計(jì)算基態(tài),如?|0>?或?|1>?,變成量子疊加。下面一個(gè)量子位的示例:
清單 5. 用 Mix() 進(jìn)行狀態(tài)疊加
[0/8] 1 |00000> qcl> qureg a[1]; qcl> dump a; : SPECTRUM a: |....0> 1 |0> qcl> Mix(a); [1/8] 0.707107 |00000> + 0.707107 |00001> qcl> dump a; : SPECTRUM a: |....0> 0.5 |0> + 0.5 |1>本例中,我們利用了量子力學(xué)的疊加原理。根據(jù)?dump a?,如果我們要測(cè)量?a?,我們會(huì)認(rèn)為“0”或“1”的概率都等于 0.5(0.707107?2)。
如果您以前從未接觸過疊加這個(gè)概念,那么它可能有點(diǎn)兒令人困惑。量子力學(xué)告訴我們,小粒子,比如電子,可以同時(shí)處于兩個(gè)位置。同樣,一個(gè)量子位可以同時(shí)有兩個(gè)不同的值。理解這一切的關(guān)鍵在于向量算術(shù)。
和經(jīng)典計(jì)算機(jī)機(jī)器狀態(tài)只是唯一的一串 1 和 0 不同,QC 的狀態(tài)是一個(gè)向量,其分量包括所有可能的 1 和 0 組成的字符串。換一種方式來說,這些 1 和 0 組成的字符串構(gòu)成了我們的機(jī)器狀態(tài)生存的向量空間的基礎(chǔ)。我們可以通過寫出如下的和來把 QC 的狀態(tài)寫下來:
清單 6. 量子計(jì)算機(jī)的向量態(tài)
a|X> + b|Y> + ...此處?X?、?Y?等是 1 和 0 組成的字符串,?a?、?b?等是分量 X、Y 等的振幅。?|X>?標(biāo)記正是物理學(xué)家們表示“名叫 X 的向量(或狀態(tài))”的方式。
Mix()?運(yùn)算符(Hadamard 運(yùn)算符)用于處于?|0>?狀態(tài)的位時(shí),將會(huì)象上面的例子一樣把狀態(tài)轉(zhuǎn)變成?sqrt(0.5)(|0>+|1>)?。但是如果我們把Mix()?用于處于?|1>?狀態(tài)的位,我們會(huì)得到?sqrt(0.5)(|0>-|1>)?。因此如果我們對(duì)任意量子位(處于任何狀態(tài))應(yīng)用兩次?Mix()?,我們就回到了開始的地方。換句話說,?Mix()?是它本身的逆。
如果我們有兩個(gè)量子位?a?與?b?(初始化成 0)并對(duì)?a?執(zhí)行了一系列量子運(yùn)算,然后對(duì)?b?執(zhí)行同樣的運(yùn)算,我們應(yīng)當(dāng)預(yù)期結(jié)束時(shí)?a?和?b?的值相同,確實(shí)是這樣。
清單 7. 獨(dú)立疊加的量子位
qcl> qureg a[1]; qcl> Not(a); [1/8] 1 |00001> qcl> Mix(a); [1/8] 0.707107 |00000> + -0.707107 |00001> qcl> qureg b[1]; qcl> Not(b); [2/8] 0.707107 |00010> + -0.707107 |00011> qcl> Mix(b); [2/8] 0.5 |00000> + -0.5 |00010> + -0.5 |00001> + 0.5 |00011> qcl> dump a : SPECTRUM a: |....0> 0.5 |0> + 0.5 |1> qcl> dump b : SPECTRUM b: |...0.> 0.5 |0> + 0.5 |1>在這個(gè)示例中,?a?和?b?是完全獨(dú)立的。如果我們測(cè)量其中一個(gè),那么不應(yīng)當(dāng)對(duì)另外一個(gè)造成任何影響。
清單 8. 獨(dú)立測(cè)量的量子位
qcl> measure a; [2/8] -0.707107 |00001> + 0.707107 |00011> qcl> dump b : SPECTRUM b: |...0.> 0.5 |0> + 0.5 |1>正如我們所預(yù)期的,?b?的頻譜并沒有因測(cè)量?a?而改變。
如果運(yùn)算比簡(jiǎn)單的?Not();Mix()?要復(fù)雜,那么我們可能很想只對(duì)?a?執(zhí)行一次這些運(yùn)算,然后把值從?a?拷貝到?b?。不錯(cuò),雖然我們無法真的進(jìn)行拷貝(因?yàn)榭截惒皇强赡孢\(yùn)算),但是我們可以把?b?初始化為 0,然后用?CNot(b,a)?會(huì)達(dá)到相同的目的。
很可惜,它所做的并不是我們所預(yù)期的。但還是讓我們嘗試一下看看會(huì)得到什么結(jié)果:
清單 9. 嘗試量子位拷貝運(yùn)算
qcl> qureg a[1]; qcl> Not(a); [1/8] 1 |00001> qcl> Mix(a); [1/8] 0.707107 |00000> + -0.707107 |00001> qcl> qureg b[1]; qcl> CNot(b,a); [2/8] 0.707107 |00000> + -0.707107 |00011> qcl> dump a; : SPECTRUM a: |....0> 0.5 |0> + 0.5 |1> qcl> dump b; : SPECTRUM b: |...0.> 0.5 |0> + 0.5 |1>a?和?b?的頻譜看起來是正確的。而且事實(shí)上如果我們只對(duì)?a?或?b?中的一個(gè)進(jìn)行測(cè)量,我們就會(huì)得到和上面一樣的結(jié)果。區(qū)別在于我們對(duì) a 和 b 都進(jìn)行測(cè)量時(shí)所發(fā)生的事。
請(qǐng)記住測(cè)量結(jié)果是隨機(jī)的,因此如果您正反復(fù)做這個(gè)實(shí)驗(yàn),您的結(jié)果可能會(huì)有所不同。
清單 10. 測(cè)量使量子位疊加坍縮
qcl> measure a; [2/8] -1 |00011> qcl> dump b : SPECTRUM b: |...0.> 1 |1>通過測(cè)量?a?,我們使?b?的疊加坍縮了。這是因?yàn)?a?與?b?糾纏在物理學(xué)家們所說的 EPR 對(duì)中,繼 Einstein 之后,Podolsky 和 Rosen 都試圖用它來說明量子力學(xué)是一個(gè)不完整的理論。然而,John Bell 后來通過實(shí)驗(yàn)反駁 Bell 不等式(正是它使 EPR 思維實(shí)驗(yàn)正式化)證明了真實(shí)粒子間的糾纏。
您試圖把一個(gè)量子變量拷貝到另一個(gè)上時(shí)發(fā)生了什么事?您以最終得到的是糾纏,而非真正的拷貝。
回頁首
Deutsch 問題
假定我們有一個(gè)函數(shù),它有一個(gè)參數(shù)是一個(gè)二進(jìn)制位,返回的也是一個(gè)二進(jìn)制位。為了使事情向好的方向發(fā)展,讓我們要求這是一個(gè)偽經(jīng)典函數(shù)。如果我們傳給它一個(gè)經(jīng)典的二進(jìn)制位(0 或 1)作參數(shù),它將返回一個(gè)經(jīng)典二進(jìn)制位。
確切地說,有 4 種可能的函數(shù)滿足這一要求。
清單 11. 共 4 種可能的布爾型一元函數(shù)
f(x) -> 0# constant zero result f(x) -> 1# constant one result f(x) -> x# identity function f(x) -> ~x# boolean negation前兩個(gè)是常量,也就是說,不管輸入如何,它們總是輸出相同的值。后兩個(gè)是對(duì)稱的,即一半時(shí)間輸出 0 ,一半時(shí)間輸出 1。經(jīng)典意義上,要確定?f()?是常量還是對(duì)稱的只有對(duì)該函數(shù)進(jìn)行兩次計(jì)算。
Deutsch 問題要我們只對(duì)?f()?進(jìn)行一次計(jì)算就確定?f()?是常量還是對(duì)稱的。以下是其工作原理。
首先,我們得用 qcl 構(gòu)造一個(gè)偽經(jīng)典運(yùn)算符來對(duì)?f(x)?進(jìn)行計(jì)算。我們將定義一個(gè)帶輸入輸出參數(shù)的量子函數(shù)來構(gòu)造該函數(shù)。例如:
清單 12. 用 qcl 語言定義一個(gè)量子函數(shù)
qufunct F(qureg out, quconst in) {CNot(out, in);Not(out);print "f(x)= ~x"; }如果 out 被初始化成“0”,調(diào)用這個(gè)函數(shù)就會(huì)把 out 變成?f(x)=~x?。您可以把?CNot()?或?Not()?代碼行注釋掉得到其它三種可能的函數(shù)中的一種。我們把上面的代碼片斷放在一個(gè)叫做 f_def.qcl 的文件中以后,我們就可以測(cè)試?F()?以確保它所做的正是我們想要的:
清單 13. 交互導(dǎo)入并測(cè)試 F()
qcl> include "f_def.qcl"; qcl> qureg in[1]; qcl> qureg out[1]; qcl> F(out,in); : f(x)= ~x [2/8] 1 |00010> qcl> dump out; : SPECTRUM out: |...0.> 1 |1> qcl> reset [2/8] 1 |00000> qcl> Not(in); [2/8] 1 |00001> qcl> dump in : SPECTRUM in: |....0> 1 |1> qcl> F(out,in); : f(x)= ~x [2/8] 1 |00001> qcl> dump out : SPECTRUM out: |...0.> 1 |0>現(xiàn)在讓我們重置量子內(nèi)存并運(yùn)行 Deutsch 算法。它首先要把 in 和 out 位放到四種基態(tài)的疊加中去才能工作。
清單 14. Deutsch 算法(加上了行號(hào))
(01) qcl> reset; (02) qcl> int result; (03) qcl> Not(out); (04) [2/8] 1 |00010> (05) qcl> Mix(out); (06) [2/8] 0.707107 |00000> + -0.707107 |00010> (07) qcl> Mix(in); (08) [2/8] 0.5 |00000> + 0.5 |00001> + -0.5 |00010> + -0.5 |00011> (09) qcl> F(out,in); (10) : f(x)= ~x (11) [2/8] 0.5 |00010> + 0.5 |00001> + -0.5 |00000> + -0.5 |00011> (12) qcl> Mix(in); (13) [2/8] 0.707107 |00011> + -0.707107 |00001> (14) qcl> Mix(out); (15) [2/8] -1 |00011> (16) qcl> measure in, result; (17) [2/8] -1 |00011> (18) qcl> if (result == 0) { print "constant"; } else { print "balanced"; } (19) : balanced1-7 行我們把 in/out 位放入四種基態(tài)的一個(gè)疊加中,其中“out=0”狀態(tài)為正振幅 +0.5,而“out=1”狀態(tài)為負(fù)振幅 -0.5。請(qǐng)注意即使我們有四個(gè)非 0 振幅,這些振幅絕對(duì)值的平方和總能達(dá)到 1。
第 9 行我們運(yùn)行量子函數(shù)?F()?,它把?f(in)?的值 XOR 到?out?量子位。函數(shù)?F()?是偽經(jīng)典的,意味著它交換基本向量,但是不會(huì)對(duì)任何振幅作更改。因此應(yīng)用?F()?后我們?nèi)杂袃蓚€(gè)振幅的值為“+0.5”,兩個(gè)振幅的值為“-0.5”。
通過對(duì)疊加態(tài)應(yīng)用?F()?函數(shù),我們一下子就對(duì)所有的四種基態(tài)有效的應(yīng)用了?F()?。這就是所謂的“量子并行性”,它是 QC 的一個(gè)重要元素。當(dāng)然我們的模擬器不得不輪流在每種基態(tài)應(yīng)用?F()?,但真正的 QC 是把?F()?作為一步運(yùn)算應(yīng)用到組合態(tài)。
14 行和 16 行的?Mix()?函數(shù)對(duì)機(jī)器狀態(tài)的疊加態(tài)取反回到計(jì)算基態(tài)(?|00011>?)。如果我們沒有運(yùn)行第 9 行的?F()?,這會(huì)把我們帶回到第 4 行的狀態(tài)(因?yàn)?Mix()?是其本身的逆)。但是因?yàn)槲覀冇?F()?交換了振幅,撤消疊加使我們處于一種不同于我們?cè)诘?9 行時(shí)的狀態(tài)。特別是?in量子位現(xiàn)在被設(shè)置成“1”而非“0”。
注意到在 15 行的振幅 -1 不重要也是很有益的。量子態(tài)是向量,我們并不關(guān)心其總長(zhǎng)度(只要不是 0)。只有向量方向,即分振幅之間的比值,是重要的。通過保持量子態(tài)是單位向量,變換就都是幺正的。這不僅使理論數(shù)學(xué)容易的多了,而且還使經(jīng)典計(jì)算機(jī)上數(shù)字計(jì)算中出現(xiàn)的錯(cuò)誤不致于象滾雪球般失去控制。
回頁首
受控相位變換
量子計(jì)算最初的目標(biāo)是使用很少一部分基本元素模擬變化多端的量子系統(tǒng)的行為。到目前為止,我們已經(jīng)討論了?Not()?、?CNot()?和?Mix()?函數(shù)。要使集合完整并考慮普遍的量子計(jì)算,那么我們需要受控相位函數(shù),?CPhase()?。
CPhase()?的第一個(gè)參數(shù)是(經(jīng)典的)浮點(diǎn)數(shù),第二個(gè)參數(shù)是一個(gè)量子位。?CPhase(a,x)?對(duì)機(jī)器的基態(tài)分量振幅的改變?nèi)缦?#xff1a;
- x 是?|0>?的基態(tài)振幅沒有更改,而
- x 是?|1>?的基態(tài)振幅乘上了 exp(i*a)=cos(a)+i*sin(a)。
x=1 時(shí)的機(jī)器狀態(tài)系數(shù)在復(fù)平面內(nèi)轉(zhuǎn)過了 a 弧度。例如:
清單 15. 演示 CPhase() 函數(shù)
$ qcl --bits=5 [0/5] 1 |00000> qcl> qureg a[1]; qcl> Mix(a); [1/5] 0.707107 |00000> + 0.707107 |00001> qcl> CPhase(3.14159265, a); [1/5] 0.707107 |00000> + -0.707107 |00001> qcl> reset [1/5] 1 |00000> qcl> Mix(a); [1/5] 0.707107 |00000> + 0.707107 |00001> qcl> CPhase(0.01, a); [1/5] 0.707107 |00000> + (0.707071,0.00707095) |00001> qcl> dump a : SPECTRUM a: |....0> 0.5 |0> + 0.5 |1>由于 exp(i*pi)=-1,?CPhase(pi,x)?會(huì)對(duì)?|1>?分量的符號(hào)取反。?CPhase(0.01, x)?在復(fù)平面內(nèi)使?|1>?分量的相位轉(zhuǎn)過了百分之一弧度。括弧里的元組(0.707071,0.00707095)是復(fù)數(shù) exp(0.01*i)=0.707071+i*0.00707095 的 qcl 表達(dá)式。
回頁首
更大的問題及解決方案
Deutsch 問題及其 N 位泛化,即 Deutsch-Jozsa 問題,也許有趣,但是沒有太多的實(shí)際價(jià)值。幸運(yùn)的是,另外還有一些量子算法讓人希望會(huì)有更大的收益。
例如 Shor 的算法能在多項(xiàng)式時(shí)間內(nèi)找到一個(gè) N 位函數(shù)的周期。雖然聽起來這并不是什么了不起的事,但分解并找到一個(gè)離散對(duì)數(shù)的困難形成了大部分公用密鑰密碼學(xué)系統(tǒng)的基礎(chǔ),如果不是全部的話。
雖然不那么壯觀,但是用可以在 O(sqrt(N)) 時(shí)間內(nèi)搜索一個(gè)無序的 N 項(xiàng)列表的 Grover 算法實(shí)現(xiàn)起來容易得多。要搜索這樣的列表,最好的經(jīng)典算法平均要 N/2 次迭代。
回頁首
結(jié)論
自從經(jīng)典計(jì)算機(jī)開始出現(xiàn),模擬電子電路以促進(jìn)更快的計(jì)算機(jī)的設(shè)計(jì)就一直是其任務(wù)之一。這一反饋循環(huán)一直在促進(jìn)計(jì)算機(jī)工業(yè)半個(gè)世紀(jì)以來的爆炸式發(fā)展。量子計(jì)算機(jī)具有潛力把這一爆炸式的發(fā)展轉(zhuǎn)變的更具活力,如同 QC 用于創(chuàng)造更快更有力的量子計(jì)算元件一樣。
2000 年 8 月間,IBM Almaden Research Center 的 Isaac L. Chuang 宣布他和他的合作者們已經(jīng)建造了一臺(tái) 5 量子位的機(jī)器,利用的是一個(gè)有 5 個(gè)氟原子的分子(請(qǐng)參閱?參考資料)。不幸的是,這一技術(shù)可能無法發(fā)展到可用的規(guī)模。
那么何時(shí)才能建成第一臺(tái)可伸縮的量子計(jì)算機(jī)呢?有一些存儲(chǔ)、操作和移動(dòng)量子位的候選技術(shù)。完整的列表已超出了本文的范圍,但是還要再過一、二十年才會(huì)有第一個(gè)有用的 QC 的說法可能還是可靠的。
總結(jié)
- 上一篇: TrueNorth:IBM的百万神经元类
- 下一篇: ACM 推荐blog汇总及OJ