本書指導(dǎo)讀者使用Python和Q#語言學(xué)習(xí)量子計算,揭開量子計算的神秘面紗。本書盡量避免復(fù)雜的數(shù)學(xué)概念,試圖直接通過量子編程來幫助讀者建立對量子計算機(jī)的理解。讀者可以通過使用Python創(chuàng)建自己的量子模擬器來學(xué)習(xí)量子計算的基礎(chǔ)知識,然后使用QDK和Q#來編寫和運行與經(jīng)典計算不同的算法。
通過閱讀本書,讀者將能夠把量子編程技術(shù)應(yīng)用于量子密鑰分發(fā)等應(yīng)用程序中,并處理真實的示例,如進(jìn)行化學(xué)模擬和搜索未排序的數(shù)據(jù)庫等。
·剖析量子計算機(jī)工作的基本機(jī)制;
·使用Python模擬量子位;
·介紹Q#和Microsoft Quantum開發(fā)工具包;
·將量子算法用于現(xiàn)實應(yīng)用。
薩拉·凱澤在滑鐵盧大學(xué)的量子計算研究所取得了物理學(xué)(量子信息)博士學(xué)位。薩拉職業(yè)生涯的大部分時間都在實驗室開發(fā)新的量子硬件,從建造衛(wèi)星到研究量子密碼學(xué)硬件。溝通量子的奇妙領(lǐng)域是她的激情所在,她喜歡建立新的演示和工具來幫助量子社區(qū)的發(fā)展。在不編寫代碼的時候,薩拉喜歡劃皮劃艇和為所有年齡的人編寫關(guān)于科學(xué)的書。
卡桑德拉·格拉內(nèi)德在滑鐵盧大學(xué)量子計算研究所取得了物理學(xué)(量子信息)博士學(xué)位,現(xiàn)在在微軟的量子系統(tǒng)組開發(fā)?Q#的標(biāo)準(zhǔn)庫。作為根據(jù)經(jīng)典數(shù)據(jù)對量子設(shè)備進(jìn)行統(tǒng)計表征的專家,卡桑德拉還幫助斯科特·阿倫森把其報告整理成書Quantum Computing Since Democritus(劍橋大學(xué)出版社,2013年)。
第 一部分 量子入門
第 1章 量子計算簡介 3
1.1 為什么量子計算很重要? 4
1.2 什么是量子計算機(jī)? 5
1.3 如何使用量子計算機(jī)? 7
1.3.1 量子計算機(jī)能做什么? 9
1.3.2 量子計算機(jī)不能做什么? 10
1.4 什么是程序? 11
什么是量子程序? 12
小結(jié) 14
第 2章 量子位:構(gòu)建塊 15
2.1 為什么需要隨機(jī)數(shù)? 16
2.2 什么是經(jīng)典位? 19
2.2.1 我們能用經(jīng)典位做什么? 21
2.2.2 抽象是我們的朋友 23
2.3 量子位:狀態(tài)和操作 25
2.3.1 量子位的狀態(tài) 25
2.3.2 操作的游戲 27
2.3.3 測量量子位 31
2.3.4 一般化測量:基獨立 35
2.3.5 用代碼模擬量子位 37
2.4 編程一個工作的QRNG 42
小結(jié) 47
第3章 用量子密鑰分發(fā)來分享秘密 48
3.1 在愛情和加密中一切都很公平 48
3.1.1 量子NOT操作 51
3.1.2 借助量子位共享經(jīng)典位 55
3.2 雙組基的故事 56
3.3 量子密鑰分發(fā):BB84 59
3.4 使用密鑰發(fā)送秘密消息 64
小結(jié) 67
第4章 非本地游戲:使用多量子位 68
4.1 非本地游戲 68
4.1.1 什么是非本地游戲? 69
4.1.2 測試量子物理學(xué):CHSH游戲 69
4.1.3 經(jīng)典策略 72
4.2 處理多量子位狀態(tài) 73
4.2.1 寄存器 74
4.2.2 為什么很難模擬量子計算機(jī)? 76
4.2.3 用于狀態(tài)制備的張量積 77
4.2.4 張量積對寄存器的量子位操作 78
小結(jié) 81
第5章 非本地游戲:實現(xiàn)多量子位模擬器 82
5.1 QuTiP中的量子對象 82
5.1.1 升級仿真器 87
5.1.2 測量起來:如何測量多量子位? 91
5.2 CHSH:量子策略 94
小結(jié) 98
第6章 隱形傳態(tài)和糾纏:量子數(shù)據(jù)的移動 99
6.1 移動量子數(shù)據(jù) 99
6.1.1 換出模擬器 102
6.1.2 還有哪些雙量子位門? 106
6.2 所有的單(量子位)旋轉(zhuǎn) 108
6.3 隱形傳態(tài) 116
小結(jié) 119
第 一部分:結(jié)語 119
第二部分 在Q# 中對量子算法進(jìn)行編程
第7章 改變勝率:關(guān)于Q#的介紹123
7.1 量子開發(fā)工具包介紹 124
7.2 Q#中的函數(shù)和操作 127
7.3 將操作作為參數(shù)傳遞 133
7.4 在Q#中玩莫甘娜的游戲 138
小結(jié) 140
第8章 什么是量子算法 141
8.1 經(jīng)典算法和量子算法 141
8.2 多伊奇-約薩算法:對搜索的適度改進(jìn) 144
8.3 oracle:在量子算法中表示經(jīng)典函數(shù) 149
8.3.1 梅林的變換 150
8.3.2 推廣我們的結(jié)果 153
8.4 在Q#中模擬多伊奇-約薩算法 157
8.5 對量子算法技術(shù)的思考 161
8.5.1 鞋子和襪子:應(yīng)用和撤銷量子操作 161
8.5.2 用阿達(dá)馬指令來翻轉(zhuǎn)控制和目標(biāo) 164
8.6 相位反沖:我們成功的關(guān)鍵 166
小結(jié) 170
第9章 量子傳感:不僅僅是相位 172
9.1 相位估計:利用量子位的有用屬性進(jìn)行測量 172
9.2 用戶定義的類型 177
9.3 從Python中運行Q# 184
9.4 特征態(tài)和局部相位 189
9.5 受控應(yīng)用:將全局相位變成局部相位 193
9.6 實現(xiàn)蘭斯洛特的相位估計游戲的最佳策略 199
小結(jié) 201
第二部分:結(jié)語 201
第三部分 應(yīng)用量子計算
第 10章 用量子計算機(jī)解決化學(xué)問題 205
10.1 量子計算的實際化學(xué)應(yīng)用 205
10.2 通往量子力學(xué)的多條路徑 207
10.3 用哈密頓算符描述量子系統(tǒng)如何隨時間演化 210
10.4 用泡利操作圍繞任意軸旋轉(zhuǎn) 214
10.5 在系統(tǒng)中做出想要的變化 221
10.6 經(jīng)歷(非常小的)變化 222
10.7 整合在一起 225
小結(jié) 230
第 11章 用量子計算機(jī)搜索 232
11.1 搜索非結(jié)構(gòu)化數(shù)據(jù) 232
11.2 關(guān)于狀態(tài)的反射 238
11.2.1 關(guān)于全一狀態(tài)的反射 239
11.2.2 關(guān)于任意狀態(tài)的反射 240
11.3 實現(xiàn)格羅弗算法 246
11.4 資源估算 252
小結(jié) 257
第 12章 用量子計算機(jī)進(jìn)行算術(shù)運算 258
12.1 將量子計算納入安全因素 258
12.2 將模算術(shù)與因數(shù)分解聯(lián)系起來 262
12.3 經(jīng)典代數(shù)和因數(shù)分解 267
12.4 量子算術(shù) 270
12.4.1 用量子位相加 271
12.4.2 處于疊加態(tài)的量子位相乘 272
12.4.3 舒爾算法中的取模乘法 275
12.5 整合在一起 278
小結(jié) 282
臨別贈言 283
附錄A 安裝所需軟件 285
A.1 在線運行示例 285
A.1.1 使用Binder 285
A.1.2 使用GitHub Codespaces 286
A.2 使用Anaconda進(jìn)行本地安裝 286
A.2.1 安裝Anaconda 286
A.2.2 用Anaconda安裝軟件包 286
A.3 安裝QDK 288
A.3.1 安裝.NET Core SDK 289
A.3.2 安裝項目模板 289
A.3.3 安裝Visual Studio Code擴(kuò)展程序 290
A.3.4 為Jupyter Notebook安裝IQ# 290
附錄B 術(shù)語和快速參考 291
B.1 術(shù)語 291
B.2 狄拉克符號 293
B.3 量子操作 294
B.4 Q#語言 296
B.4.1 類型 296
B.4.2 Q#的聲明和語句 297
B.4.3 Q#表達(dá)式和操作符 300
B.4.4 Q#標(biāo)準(zhǔn)庫 301
B.4.5 IQ#魔法命令 303
附錄C 線性代數(shù) 304
C.1 走近向量 304
C.2 親自體驗矩陣 306
附錄D 通過實例探索多伊奇-約薩算法 316
D.1 使用我們的技能,嘗試做點什么 316
D.2 步驟1:為多伊奇-約薩制備輸入狀態(tài) 317
D.3 步驟2:應(yīng)用oracle 318
D.3.1 例1:“id”oracle 320
D.3.2 例2:“not”oracle 321
D.3.3 例3:“zero”oracle 322
D.4 步驟3和4:撤銷對目標(biāo)量子位的制備,并測量 323