Grover算法试验
《量子算法与编程入门》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算法试验相关推荐
- qiskit的grover算法demo
01 资源 01.01 vscode的qiskt插件 IBM的qiskit提供了vscode的插件.插件源码位置:https://github.com/Qiskit/qiskit-vscode 使用参 ...
- 学习笔记-Grover 算法
问题描述 假设有n个量子比特,用来记录数据库中的每一个数据的索引,一共可以表示个数据,记为N 个,希望搜索得到的数据有M个. 分析 假设10为目标,通过Oracle操作使10态进行翻转,然后把所有态关 ...
- Grover算法思想
@算法简介 Grover算法是相较于经典数据库搜索算法O(n)O(n)O(n)复杂度实现二次加速的量子算法,即复杂度为O(N)O(\sqrt{N})O(N). 算法本质 Grover算法实质上是求解 ...
- 量子计算(二十二):Grover算法
文章目录 Grover算法 一.什么是搜索算法 二.怎么实现Grover搜索算法 Grover算法 一.什么是搜索算法 举一个简单的例子,在下班的高峰期,要从公司回到家里,开车走怎样的路线才能够耗时 ...
- 量子计算与量子信息之Grover算法的量子电路实现
量子计算与量子信息之Grover算法的量子电路实现 文章目录 量子计算与量子信息之Grover算法的量子电路实现 一.简介 二.电路的逻辑示意图 即使你并没有完全掌握量子计算的基本内容,仍然可以看懂这 ...
- 量子推断(quantum inference)Grover算法
quantum inference & Grover algorithm 综述 细节 量子quantum的叠加态 Grover算法 Household矩阵 定义 Household矩阵的数学意 ...
- 着色问题求解java 图形化_练习 - 实现 Grover 算法以解决图形着色问题
练习 - 实现 Grover 算法以解决图形着色问题 40 分钟 在本模块中,最后将以端到端的方式实现 Grover 搜索算法:从图形着色问题的黑盒定义到处理算法的随机性质的逻辑. 备注 出于必要,本 ...
- 本源量子云平台实现Grover算法
本源量子云平台实现Grover算法 1.Grover算法 首先我们需要知道量子算法执行的一个宏观过程: 对于量子计算有个深刻认识--老师曾说: 1.1.1.前置知识点---Oracle的理解 再进入G ...
- 量子计算机模型取,Grover算法在单道量子计算模型下的实现
摘要: 量子计算机以其巨大的潜力日益得到人们的重视,而且在通向真正实用的量子计算装置的道路上,我们也取得了巨大的进步.从经典计算机的体系结构得到启示,人们提出了量子计算的量子线路模型.它基于一系列作用 ...
最新文章
- 计算机缺失缺少mfc110.dll等相关文件的解决办法
- 在IIS(64位)上部署WCF服务访问Oracle数据库
- 手动挡和自动挡该怎么选?哪个起步快、哪个更舒适?
- Ajax进度条动画制作网址
- 互联网1分钟 | 0306 熊猫直播被爆本月申请破产;腾讯QQ注销功能本周灰度体验,预计下周正式发布...
- ACM练习 链表排序 II 【WA】
- php 数组 1 开始,php数组使用1
- python连接access数据库odbc_对Python通过pypyodbc访问Access数据库的方法详解
- 15 —— npm —— package.json 与 package-lock.json 的作用
- AM335X 3款核心板比较
- 程序员也要学英语——连词、并列句和从句
- 网站+云服务器+价格表,网站 云服务器 价格表
- oracle 11g 重置,oracle数据库重置
- C语言实现关机的小代码,不怎么完善,新人勿喷!
- SAP系统用户账号类型介绍
- util.Date和sql.Date之间的转换
- 写出语句的四元式序列
- 用R进行文本分析初探——以《红楼梦》为例
- 个人向的前端的坑坑洼洼的记录(1)
- HTML5期末大作业:简单全屏音乐个人网站模板——音乐娱乐网站(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码