《量子算法与编程入门》4.3 Grover算法

量子搜索算法如何工作
https://quantum.country/search

01 grover算法在Qiskit上试验

grover.py

# grover.py
# 《量子算符与编程入门》 4.3 Grover算法
# 基于QISKit实现Grover算法
# mytoken = "mytoken"
myconfig = {"url": 'https://quantumexperience.ng.bluemix.net/api'
}
from IBMQuantumExperience import *api = IBMQuantumExperience(token=mytoken, config=myconfig)# 每行前面不要有空格和tab键
# code代码的格式要求比较严格
# 1 include "qelib1.inc" 与引号之间对多只能有一个回车换号符
code = '''include "qelib1.inc";qreg q[5];creg c[5];h q[0];h q[1];x q[2];h q[2];h q[2];h q[1];h q[2];cx q[2],q[1];h q[1];h q[2];tdg q[2];h q[0];h q[2];cx q[2],q[0];h q[0];h q[2];t q[2];h q[1];h q[2];cx q[2],q[1];h q[1];h q[2];tdg q[1];tdg q[2];h q[0];h q[2];cx q[2],q[0];h q[0];h q[2];h q[0];h q[1];cx q[1],q[0];h q[0];h q[1];t q[2];tdg q[1];h q[2];h q[0];h q[1];cx q[1],q[0];h q[0];h q[1];t q[0];s q[1];h q[0];h q[1];x q[0];x q[1];h q[1];h q[0];h q[1];cx q[1],q[0];h q[0];h q[1];x q[0];h q[1];h q[0];x q[1];measure q[0] -> c[0];h q[1];measure q[1] -> c[1];
'''
# 我申请的个人账号没有使用物理芯片的权限
# data = api.run_experiment(qasm=code, backend='ibmqx4', shots=1024, name=None, timeout=180, access_token=mytoken)
data = api.run_experiment(qasm=code, backend='simulator', shots=1024, name=None)result = data['result']['measure']
label = result['labels']
value = result['values']
print("测量结果:")
print(label)
print("对应的概率为:")
print(value)print("data的完整返回结果:")
print(data)import matplotlib.pyplot as pltplt.bar(label, value)
plt.show()

用模拟设备运行结果:

C:\Python36\python.exe D:/tmp/tensorflow/grover.py
测量结果:
['00011']
对应的概率为:
[1]
data的完整返回结果:
{'status': 'DONE', 'idExecution': '5c30a53a65bb5100566f3e2f', 'idCode': '5c30a53965bb5100566f3e2e', 'result': {'extraInfo': {'seed': 3816039801}, 'measure': {'qubits': [0, 1], 'labels': ['00011'], 'values': [1]}}}

在ibmqx4上的试验结果

02 grover算法在Liqui|>上试验

grover.fsx

#if INTERACTIVE
#r@"..\bin\Liquid1.dll"
#else
namesapce Microsoft.Research.Liquid
#endif
open System
open System.Collections.Generic
open Microsoft.Research.Liquid
open Util
open Operationsmodule Script=[<LQD>]let Grover() = show "Grover算法"let ket = Ket(3)let qs = ket.QubitsX qs.Tail.TailH >< qsCCNOT qslet target = !!(qs, 0, 1)H >< targetX >< targetH target.TailCNOT targetH target.TailX >< targetH >< qsM >< targetfor q in target doshow "测量得到的结果是: %s"(q.ToString())#if INTERACTIVE
doScript.Grover()
#endif

运行结果:

d:\git\Quantum\Liquid\Samples>fsi grover.fsx
0:0000.0/Grover算法
0:0000.0/
0:0000.0/===========================================================================================
0:0000.0/=    The Language-Integrated Quantum Operations (LIQUi|>) Simulator                       =
0:0000.0/=        Copyright (c) 2015,2016 Microsoft Corporation                                    =
0:0000.0/=        If you use LIQUi|> in your research, please follow the guidelines at             =
0:0000.0/=        https://github.com/StationQ/Liquid for citing LIQUi|> in your publications.     =
0:0000.0/===========================================================================================
0:0000.0/
0:0000.0/测量得到的结果是:                  0|0>+                 1|1>
0:0000.0/测量得到的结果是:                  0|0>+                 1|1>

03 grover算法在ProjectQ上试验

grover.py

# grover.py
# ProjectQ上Grover算法
from projectq.backends import CircuitDrawer
from projectq import MainEngine
from projectq.ops import *def grover(eng, t):qs = eng.allocate_qureg(3)X | qs[2]All(H) | qsH |qs[2]CNOT | (qs[1], qs[2])Tdagger | qs[2]CNOT | (qs[0], qs[2])T | qs[2]CNOT | (qs[1], qs[2])Tdagger | qs[2]CNOT | (qs[0], qs[2])Tdagger | qs[1]T | qs[2]CNOT | (qs[0], qs[1])H | qs[2]Tdagger | qs[1]CNOT | (qs[0], qs[1])T | qs[0]S | qs[1]H | qs[0]H | qs[1]X | qs[0]X | qs[1]H | qs[1]CNOT | (qs[0], qs[1])H | qs[1]X | qs[0]X | qs[1]All(H) | qsAll(Measure) | qseng.flush()if t == 'simulator':print("执行Grover算法,检索到的元素是:" + str(int(qs[0])) + str(int(qs[1])))elif t == 'drawer':drawing_engine = CircuitDrawer()latex = drawing_engine.get_latex()circuit = open("grover.tex", 'w')circuit.write(latex)circuit.close();else:passif __name__ == "__main__":eng = MainEngine()types = 'simulator'grover(eng, types)drawing_engine = CircuitDrawer()eng = MainEngine(drawing_engine)types = 'drawer'grover(eng, types)

运行结果:

C:\Python36\python.exe D:/tmp/tensorflow/grover.py
执行Grover算法,检索到的元素是:11Process finished with exit code 0

运行pdflatex grover.tex生成pdf没成功。

如有错误之处,欢迎批评指正。QQ群:579809480。

Grover算法试验相关推荐

  1. qiskit的grover算法demo

    01 资源 01.01 vscode的qiskt插件 IBM的qiskit提供了vscode的插件.插件源码位置:https://github.com/Qiskit/qiskit-vscode 使用参 ...

  2. 学习笔记-Grover 算法

    问题描述 假设有n个量子比特,用来记录数据库中的每一个数据的索引,一共可以表示个数据,记为N 个,希望搜索得到的数据有M个. 分析 假设10为目标,通过Oracle操作使10态进行翻转,然后把所有态关 ...

  3. Grover算法思想

    @算法简介 Grover算法是相较于经典数据库搜索算法O(n)O(n)O(n)复杂度实现二次加速的量子算法,即复杂度为O(N)O(\sqrt{N})O(N​). 算法本质 Grover算法实质上是求解 ...

  4. 量子计算(二十二):Grover算法

    文章目录 Grover算法 一.什么是搜索算法 二.怎么实现Grover搜索算法 Grover算法 一.什么是搜索算法  举一个简单的例子,在下班的高峰期,要从公司回到家里,开车走怎样的路线才能够耗时 ...

  5. 量子计算与量子信息之Grover算法的量子电路实现

    量子计算与量子信息之Grover算法的量子电路实现 文章目录 量子计算与量子信息之Grover算法的量子电路实现 一.简介 二.电路的逻辑示意图 即使你并没有完全掌握量子计算的基本内容,仍然可以看懂这 ...

  6. 量子推断(quantum inference)Grover算法

    quantum inference & Grover algorithm 综述 细节 量子quantum的叠加态 Grover算法 Household矩阵 定义 Household矩阵的数学意 ...

  7. 着色问题求解java 图形化_练习 - 实现 Grover 算法以解决图形着色问题

    练习 - 实现 Grover 算法以解决图形着色问题 40 分钟 在本模块中,最后将以端到端的方式实现 Grover 搜索算法:从图形着色问题的黑盒定义到处理算法的随机性质的逻辑. 备注 出于必要,本 ...

  8. 本源量子云平台实现Grover算法

    本源量子云平台实现Grover算法 1.Grover算法 首先我们需要知道量子算法执行的一个宏观过程: 对于量子计算有个深刻认识--老师曾说: 1.1.1.前置知识点---Oracle的理解 再进入G ...

  9. 量子计算机模型取,Grover算法在单道量子计算模型下的实现

    摘要: 量子计算机以其巨大的潜力日益得到人们的重视,而且在通向真正实用的量子计算装置的道路上,我们也取得了巨大的进步.从经典计算机的体系结构得到启示,人们提出了量子计算的量子线路模型.它基于一系列作用 ...

最新文章

  1. 计算机缺失缺少mfc110.dll等相关文件的解决办法
  2. 在IIS(64位)上部署WCF服务访问Oracle数据库
  3. 手动挡和自动挡该怎么选?哪个起步快、哪个更舒适?
  4. Ajax进度条动画制作网址
  5. 互联网1分钟 | 0306 熊猫直播被爆本月申请破产;腾讯QQ注销功能本周灰度体验,预计下周正式发布...
  6. ACM练习 链表排序 II 【WA】
  7. php 数组 1 开始,php数组使用1
  8. python连接access数据库odbc_对Python通过pypyodbc访问Access数据库的方法详解
  9. 15 —— npm —— package.json 与 package-lock.json 的作用
  10. AM335X 3款核心板比较
  11. 程序员也要学英语——连词、并列句和从句
  12. 网站+云服务器+价格表,网站 云服务器 价格表
  13. oracle 11g 重置,oracle数据库重置
  14. C语言实现关机的小代码,不怎么完善,新人勿喷!
  15. SAP系统用户账号类型介绍
  16. util.Date和sql.Date之间的转换
  17. 写出语句的四元式序列
  18. 用R进行文本分析初探——以《红楼梦》为例
  19. 个人向的前端的坑坑洼洼的记录(1)
  20. HTML5期末大作业:简单全屏音乐个人网站模板——音乐娱乐网站(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码

热门文章

  1. 免费电影票API接口(1)
  2. 可变数据软件如何批量打印合格证
  3. dpm hsc_HSC的完整形式是什么?
  4. 2022-07-13 第五小组 瞒春 学习笔记
  5. 虚拟运营商颠覆八大行业:170号码成主流
  6. Vue.js 框架基础笔记
  7. (精品)基于Spingboot vue的HIS医院门诊信息系统设计与实现 毕业论文+项目源码及数据库文件
  8. 用Java算人的平均身高体重和身高体重的总和
  9. 如何开启小米路由器的ssh功能
  10. js身份证号有效性验证