量子算法抛转(以及Oracle函数初步)
接下来要接触量子算法了,我们会看到怎么利用量子并行机制和干涉原理。干涉在算法对结果进行测量求值时举足轻重。
Deutsch-Jozsa 算法
DJ算法是量子算法的入门算法,就像编程界的“Hello World”。通过它就能演示量子机是如何“压制”传统机的算法的,不过它当然不能写成Hello World那种一两行代码就搞定。
DJ算法是用来判定一个函数是常量函数还是平衡函数的:
- 这个函数接受\(n\)个0或1组成的串,输出0或1:\(f\{0,1\}\rightarrow f\{0,1\}\)
- 常量函数是不管输入什么都输出固定的值(0或1)
f(0)=1,f(1)=1
\]
- 平衡函数是输出一半的0一半的1
f(0)=1,f(1)=0
\]
在传统计算中,可以分别输入0和1,通过if-then-else分支结构来对比结果。当\(n=1\)时,对比两次就可以;对于任意的\(n\),需要对比一半以上的输入,也就是\(2^{n-1}+1\)次。所以这个问题的时间复杂度是指数的。

现在使用量子位来解决,当有2个的情形下,先通过H门制备4个状态的叠加态。假设我们有Oracle函数(一种非常智能的电路),把它作用在叠加态上就能一次计算出全部的\(f(x)\)的值。后面再说它的原理,现在知道的确有这种东西就行

如上图,主要思路就是干涉叠加以后通过Oracle函数一次输出所有值,然后测量到0就是常量函数,1就是平衡函数。
这里为了简化,先使用一个量子位,要么传0要么传1进去。下面是它的电路图

①②用来制备叠加态,③是Oracle函数,④是干涉步骤。通过数学计算来看一下每一步做了啥:

前两步自不必说,第三步使用了一个Oracle函数

当\(f(x)=0\)时,第二个量子位不变,所以有(为了好看,把分母省略了)

当\(f(x)=1\)是,第二个量子位的状态系数反转:

所以可以把他们写在一起:
\]
把\(x=|0\rangle+|1\rangle\)代入,有

可以把\(f(x)\)所有可能的组合都算一遍第一个量子位的叠加态就是

可见对于相同的函数类型,只有一个正负号的差别。也就是整体相位中的\(\Delta \gamma=\pi\)。

前面说过,整体相位有差别的测量结果一样,这对于我们是方便了,因为相同函数类型的概率一样。这样只要给不同的函数类型结果使用一个转换来区分开就行。所以第四步给第一个量子位使用了H门,这样常数函数会被测量为\(|0\rangle\),而平衡函数被测量为\(|1\rangle\)。
\]
一个qubit的情形分析完了,来看\(n\)个的场景,比如4个:\(f(1101)\)。有几个就并行使用几次H门,先得到叠加态

然后应用Oracle函数,按照上面的方法再计算一遍,在最后一步汇总\(f(x)=0\)和\(f(x)=1\)会得到

第二个qubit在之后会保持不变,所以我们只关注第一个:
\]
接下来再次使用H门,多个量子位的哈德玛门变换是
\]
其中的\(<x,y>\)表示两个向量的二进制点乘,比如
\]
因此应用哈德玛门之后这些量子位变成了

当\(y=|000\cdots0\rangle\)时,\(x\cdot y=0\),


当\(f(x)\)是平衡函数时,里面的状态会互相抵消;当\(f(x)\)是常数函数时,乘机会互相叠加变成
\]
所以,测量结果依赖于\(f(x)\)创建的干涉态
\right|^2
\]
试验
这里使用咱们国家本源量子的模拟器来测试。先测试一下\(f(x)=x_0\oplus x_1x_2\),结果如下

可以看到四个状态的概率基本都接近0.25,所以这个函数是平衡函数。
要测试常数函数的话,可以使用恒等操作

Oracle函数
Deutsch-Jozsa算法和很多其他量子算法都对许多不同的问题提供了解法模板,只要替换模板中的Oracle函数就能解答特定问题。当然要熟练掌握替换技巧还是挺难的,尤其对于新手。通过打破指数级问题的时间魔咒提高了我们对加速解答问题的期望,解法可能很难,不过一般都贼有效。上面的例子里,我们把Oracle函数硬编码到电路中,并非直接查询\(f(x)\)的值,而是进行了结果的转换测量。这个方法并不通用,只是为了给大家演示量子算法。所以你在这里叹气我也理解。
客观实际是如果我们期望 Oracle 函数能够处理任何函数,那么在最坏的情况下,需要查询至少一半的数据。我们可以认为这些信息已经处于叠加状态,所以可以并行计算它们。不过事情没有那么简单,暂时也不会进一步详细说明。接下来我们会看更多依赖Oracle的量子算法。
量子算法抛转(以及Oracle函数初步)的更多相关文章
- oracle函数操作
感于总有些网友提出一些非常基础的问题,比如有没有实现某某功能的函数啊,某某函数是做什么用的啊,格式是什么等等,同时也感受到自己对oracle函数认识的不足,于是集中月余时间专注于oracle函数,小有 ...
- 笔记 | 第一个量子算法:Deutsch-Jozsa算法,非常好懂!
<关于胡小兔的博客又诈尸了这件事> 信息物理真是难啊!上节课讲了量子计算的最基础的概念和Deutsch-Jozsa算法,我看了好几天才看懂-- 等考完试估计我就忘了,所以今天先写个博客给未 ...
- oracle函数,游标,视图使用总结0.000000000000000000001
oracle函数或者叫存储过程,在实际的开发过程中对于复杂的业务需求是非常有用的,非常有效率的也是非常好玩儿的一个技术点. 平常在开发过程中对于CRUD功能较多.一般SQL即可应付,大不了就是长一点而 ...
- 【函数】Oracle函数系列(2)--数学函数及日期函数
[函数]Oracle函数系列(2)--数学函数及日期函数 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不 ...
- oracle函数listagg的使用说明(分组后连接字段)
关于oracle函数listagg的使用说明 工作中经常遇到客户提出这样的需求,希望在汇总合并中,能够把日期逐个枚举出来. 如图,原始数据是这样的: 客户希望能够实现这样的汇总合并: 那么通常我会使用 ...
- 浅谈Oracle函数返回Table集合
在调用Oracle函数时为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合 ...
- 算法总结之欧拉函数&中国剩余定理
算法总结之欧拉函数&中国剩余定理 1.欧拉函数 概念:在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)( ...
- oracle学习笔记(三)oracle函数
--oracle 函数 --lower(char):将字符串转换为小写格式 --upper(char):将字符串转换为大写格式 --length(char):返回字符串的长度 --substr(cha ...
- oracle函数和存储过程有什么区别
oracle函数和存储过程有什么区别 1. 返回值的区别,函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有 2.调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用. 函数 ...
- Oracle函数sys_connect_by_path 详解
Oracle函数sys_connect_by_path 详解 语法:Oracle函数:sys_connect_by_path 主要用于树查询(层次查询) 以及 多列转行.其语法一般为: s ...
随机推荐
- ansible(5)--ansible的script模块
1. script模块 作用:在远程主机运行本地的脚本: 调用格式: -m script -a "/PATH/TO/SCRIPT_FILE": 参数: creates:如果其后跟的 ...
- Ubuntu 一直卡在开机界面或者用户登录界面死循环问题的解决
此方法并不全部通用,根据自己实际情况 建议提前快照再试试此方法 原因:NVIDIA 驱动所致,之前安装方式nvidia驱动出问题. 解决办法:卸载nvidia驱动,重新安装. (1)进入文本模式:CT ...
- Python:解决Matplotlib保存图片显示不全问题
保存图片的时候设置参数bbox_inches = 'tight',如: plt.savefig("Matplotlib/graph.png", bbox_inches = 'tig ...
- 搭建一套完整的ELK系统
ELK日志收集系统介绍 一 简单介绍 ELK部署搭建有很多成型的方案,这里推荐一种比较中规中矩的方案,它整合了logstash比较消耗资源以及当服务端临时宕机的时候出现数据丢失的问题,主要由fi ...
- tkinter的Text组件设置禁止编辑
完整代码: from tkinter import * import requests window = Tk() window.geometry('1000x500+300+100') window ...
- WPF 实现触摸滑动功能
自定义ScrollViewer的Touch事件--触摸上下移动ScrollViewer滚动到指定位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...
- request to https://registry.npm.taobao.org/cnpm failed, reason: certificate has expired
换华为的,否则会出问题:cnpm confg set registry https://mirrors.huaweicloud.com/repository/npm/ npm ERR! code CE ...
- ubuntu18.04开机grub引导界面、登录界面美化
1.引导界面美化 下载grub主题 https://www.gnome-look.org/browse/cat/109/order/latest/ https://www.pling.com/s/Gn ...
- itest(爱测试)开源接口测试&敏捷测试&极简项目管理 7.1.0 发布,ui优化及bug修复
(一)itest 简介及更新说明 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock 6合1,又有丰富的统计分析.可按测试包 ...
- js 求任意两数之间的和
知识点:函数的传参,函数的返回值 函数的传参 函数的参数包括以下两种类型: 1.形参:在定义函数时,声明的参数变量仅在函数内部可见: 2.实参:在调用函数时,实际传入的值. 示例 我们在定义函数的时候 ...