怎么理解量子比特模型,遷移到量子計算機開始編程
視頻鏈接:
好的現在是2025年的3月最后一天,3月31號,今天我們討論的話題是量子編程,也就是在量子計算機上,使用特定的語言進行軟件開發。當然我們要討論的,不是,量子編程的某一門語言的技術細節,而是考慮這樣一個問題,就是從經典計算機,遷移到量子計算機,這樣一個應用平臺上以后,我們所需要注意的那些變化的地方,也就是經典比特這個模型,遷移到量子比特這種概率模型上以后,我們,編程的一些基本的邏輯和,方法或者說,潛意識應該是有怎么樣的轉變的,呃這是我們今天要討論的問題.
1 基礎概念
首先呢,我們看量子比特它的這個概念,以及它的一些性質,我們和量子比特相關的一些操作,呃量子比特呢,是量子計算機,量子計算當中的信息的基礎對象,它特征就是,可以容納所有可能狀態的疊加,那每一個疊加,都是有效的量值為狀態啊,也就是說,它可以同時對2N次方個值進行編碼,這個n是量子比特的位數有位寬,我們看這個兩比特的經典,這個兩比特的經典比特,它可能取值是00|01|10|11,這四個取值中的任何一個,它都是可以取到的,但在同一時刻,它只能取其中的一個,我們要完整的表達它的話,我們需要這個4對,按兩比特的量,經典比特來來進行表達,而對于量子比特而言,它可以同時疊加所有的取值,也就是說這兩比特它既可能取00,也可能取01,也可能取10,還可能取11,呃,就在我們的測量發生以前,我們是無法確知,它到底是取了什么值的,我們只只能夠知道,這兩比特的取值啊,取不同的狀態值的概率啊,通常情況下都是各占25%,而只有通過測量,才能夠知道,這兩個量子比特到底是什么值。
這上述過程就涉及到了兩個操作概念,就是疊加和糾纏,我們分配了一個量子比特以后,將它設為初態,就類似于我們在經典計算機上,將一個變量設置為0值,然后使用h們hand這個操作以后,將量子比特進入到疊加態,這個時候他的取值就不確定了啊,通常就是0和一的取值各占50%,我們只有通過呃,h們的逆操作讓他回到出臺,這時候它的值是確定的,或者通過測量,將它的疊加態坍縮到經典比特狀態,另外一個操作是糾纏啊,我們經常聽到量量子量子糾纏,這個操作實際上就是把兩個量子比特,讓他們發生糾纏,進入糾纏態,嗯這個Q1的狀態取決于Q0,在Q0上的任何變化都會傳遞到Q1.
2 應用舉例
呃有了這樣一個基礎概念以后,我們就可以來看,在量子對量子比特而言的讀寫操作,是什么樣的,經典模型當中,我們要去獲取一個比特的值,我們需要發起讀行為,而在量子模型當中,讀意味著要測量量子比特的狀態,呃這里是量子比特的這個數學描述,可以理解為阿爾法方,這個阿爾法或或者和,和這個Beta是取0或者一,這是概率的平方根,這個阿爾法方意味著取0的概率,β方意味著取一的概率,嗯阿爾法加別的等于一些,我們測量量子比特以后,嗯它有阿爾法方的概率返回0,有別的方概率返回一,這個也就是說,我們的讀就意味著測量,測量,意味著按照量子比特這種概率分布,來返回測量結果,所以讀之前,我們是不確定量子模型的狀態的,讀之后量子比特的狀態就確定了,而且哎如果,這個行為發生重復的話,那他的這個返回的值的概率分布,和量子比特的狀態描述,是逐漸接近的;
然后是寫操作,寫操作就和糾纏態有些關系了,經典模型,讓我們對量子比特發起寫,在量子模型當中呢,呃,就意味著要去測量量子比特的狀態,如果它和我們寫的值不一致,就反轉他的,哇這里這不是相位啊,是反轉他的值,比如說從0反轉的e狀態,e狀態反轉環繞零狀態,那這種變化或者這種值的變化,狀態變化,就會傳遞到與他糾纏的量子比特上,比如說我們將呃,這個Q0和Q1這兩個糾纏,糾纏的量子中的一個Q0,呃改變了Q0的狀態,那么Q1的狀態也會隨即發生改變.
2.1 量子加密通信
那這些特性到底有什么用呢,我們為什么要使用量子計算機,來進行編程,這樣或者說它有什么好處呢。
呃通常有這樣一些,比如說加密通信,我們通常說量子量子,這個量子密鑰,你可以保證,我們的通信是不可被竊聽的,或者即使竊聽發生了,我們也能夠及時的感知到,這種竊聽行為,這在此前是不可想象的,但到底這個過程是怎么樣的呢,就是基本的原理,就是此前剛才我們說的,測量對量子比特的影響,比較經典的量子啊,這個模型當中,我們發起了讀以后,在量子模型的下,就是要測量量子比特的狀態,這一輪呢,量子比特狀態是不確定的,它是一個疊加態,來測量以后返回的那個值是確定的,那這意味著中間發生變化,從不確定狀態進入到了確定狀態,也是測量后,這個量子比特的狀態唯一確定了,也就是意味著疊加態坍縮了,或者說測量會破壞量子比特的疊加態,
下圖左側展示了收發信息和感知竊聽的過程,那發送者將一個量子比特,呃進入疊加態以后,傳遞給接收者,接收者再通過這個h逆操作,呃得到Q0的發送者發送過來的,發送之前的他要發送那個信息,那一比特對應的狀態,而如果這個中間有一個竊聽者,偷偷地測量了這個發送的量子比特,那么它就會導致疊加在坍縮,而這個坍縮以后的信息,又又是沒有經過這個標準的逆操作的,那么它就無法恢復原始信息,而這個竊聽發生了以后呢,我們在接收方拿到了量子比特,由于它是坍縮以后的量子比特,我們再通過逆操作,也無法恢復這個信息,如果我們在信息當中,隱藏那么一個標記,我們如果無法正常的恢復這個標記,那么就認為這個過程中,可能發生了竊聽,而對竊聽者而言他,即使知道,要知道這是一個疊加態的量子,呃他知道要進行逆操作,但對于一長串的這個量子比特而言,他不知道哪些量子比特進入了疊加態,那么他也不能夠正確的獲取信息,所以一方面他無法獲取信息,另一方面他有了這個竊聽的動作以后,我們就能夠知道呃,他做了這件事情,呃就是有雙重保險,保證我們的信息不會被竊聽,
2.2 量子加速
另外一方面就是量子計算的加速功能,比如說它可以對我們的搜索加速,甚至可以做到,指無序數據的無遍歷搜索,就不需要看所有的數據,都能夠找出來,其中我們要符合條件的目標,比如說量子計算當中的Grover算法,它對于無序數據的搜索,時間復雜度低至了O(根號n),在經典計算機的情況下,對于無序數據,至少最優的情況,當然是第一個目標就找到了,是O(1) 當然那是最理想的情況下,但一般情況下,都是需要把整個數據集進行遍歷的,也就是時間復雜度應該是o n,而使用Grover算法,量子計算實現的grover算法呢,它的時間復雜度可以低到o根號n,也就是意味著不需要逐個的去看,不需要把所有數據看一遍,都能夠找到目標,那這個過程到底怎么樣呢,就比如說像下面這樣,在,N等于2的n次方個無序數據當中,搜索目標,我們需要準備一個n位的量子比特,嗯然后讓他們進入疊加態,使用Orcale操作,將所有的復調件的量子態進行反向,然后呢再進行操作,放大這個概率的放大,也就是做這么一個呃非0狀,它的這個-1相移,那這個過程進行多次迭代啊,這個過程,這個這這一組操作實際上就是在擴散,就就要放大,目的就是放大目標狀態的概率幅,然后減小非目標狀態的概率幅,然后這個多次迭代以后呢,那個,更可能是目標的那個東西,他的概率就會相當突出,鶴立雞群,然后我們只需度量,找概率最大的那個目標,那個那個那個對象,然后再看他是不是目標,如果不是的話,我們就重新來,然后直到找出符合我們條件的,確定是目標的那個,當然這個過程當中,沒有確定性,我單看那個表述都不嚴謹了,就是我們只是把那個,那某某一個編碼,我們最終找出來那個東西,它只是說非常有可能是目標,但是我們永遠不能說,不能找到那個確定式目標,所以,我們需要對這個迭代的結果進行度量,然后再去比對它是不是目標。
嗯,這這個,這個就和我們經典的狀態也不一樣了,其實所有東西都是不確定的,我們只是通過這個概率來進行,檢索就有點像我們再用眼睛,尋找這個符合條件目標一樣,就像計算機視覺當中來進行圖片,其中的目標的分類,我們最后生成的結果,一定是一組概率值,我們只是找認為概率最大的那個,是我們要找目標,那這個過程呢,實際上就不需要遍歷集合了然,后,根據一定的特征來進行目標的發現,Grover的迭代過程,就類似于,增強目標和其他元素的對比度,一眼就能夠看到。
3 量子編程語言
嗯說那么多,我們還沒有看這個量子編程語言,到底是什么樣的,以這個q#為例,這是微軟推出的,呃一個量子編程語言,它的程序是像下面這樣的,這個程序呢,是將兩個量子比特,置為疊加態和糾纏態,呃這個和我們一般的編程語言,沒有太大差異,因為呃,高級語言就是對機器進行抽象,這里就對量子計算機進行抽象,我們做的也是一些,函數的調用,其中包含了一些量子計算的特定操作,呃我們只要有了相應的概念,就可以去使用它。
這里我們逐行說一說,這是分配兩個量子比特,就有點像為變量分配空間,然后呢是將Q1,呃進入疊加態,然后呢這里,將Q1和Q2這兩個量子比特進行糾纏,讓Q2的值取決于Q1,這個Domber信,這是一個方法,它可以展示嗯,量子計算機的狀態,還包括量子的狀態,這個方便我們進行調試,呃這個不會測量,它只會展示這個量子可能狀態,比如說這里展示出量子,這個量子比特的取值可能是00,可能是11,各站的這個概率都是50%,嗯這個呈預言的結果就是,然后將Q1 Q2的狀態進行測量,測量以后得到是11,這里呢就奇怪,這個Q1 Q2兩個比特,為什么不是四種結果呢,這個這里就很關鍵,就是只讓Q1進行了,進入了疊加態,那么只有Q1,他的狀態是零一不確定的,那么這里就只有Q1是01變的,而Q2本身是一個初態的,它沒有進入疊加的狀態,然后呢它又和Q1進行了糾纏,那么它的值就取決于Q1,所以Q0 Q2值一直和Q1保持一樣,所以它們的取值要么是00,要么是11,這里已多次運行,也可以看到了,這個測量結果不是00就是11,所以測量會導致,導致這個坍縮傳遞到糾纏量子比特,測量了兩個糾纏量子比特的狀態,他不是00呢就是11。
4 總結
所以這個量子編程的最大的不同,就是基礎的模型發生的變化,由量子比特的這種呃狀態的疊加性,然后量子比特之間的這種糾纏,以及我們可以通過這種概率的放大,來進行目標的查找,都使得量子編程,和經典的編程有所不同,嗯但對于軟件開發人員而言,了解了這些基本的概念以后,就仍然可以以先前的,那些軟件開發的方式,進行開發,因為軟件本身也是對機器進行抽象,了解原理,就是幫助我們更好地去尋找,解決特定問題的實現方法,嗯就這么多,拜拜。