量子计算机就是基于单qubit门和双qubit门的,再多的量子操作都是基于这两种门。双qubit门比单qubit门难理解得多,不过也重要得多。它可以用来创建纠缠,没有纠缠,量子机就不可能有量子霸权。

CNOT门(受控非)

C是受控Controlled的首字母

受控非们作用在两个qubit上,一个叫控制位\(|\text{x}\rangle\),一个叫目标位\(|\text{y}\rangle\)。如果控制位是\(0\),目标位不变;如果控制位是\(1\),目标就反转:



所以有

\[|00\rangle\overset{CNOT}{\rightarrow}|00\rangle,|01\rangle\overset{CNOT}{\rightarrow}|01\rangle,|10\rangle\overset{CNOT}{\rightarrow}|11\rangle,|11\rangle\overset{CNOT}{\rightarrow}|10\rangle
\]

受控非们的图示是



实现的能力是

\[|x\rangle\otimes|y\rangle\rightarrow|x\rangle\otimes\left(|x\rangle\oplus|y\rangle\right)
\]

\(\oplus\)是模2加法(也就是异或)。更简单的写法是

\[|x,y\rangle\rightarrow|x,x\oplus y\rangle\
\]

控制位可以是多个基向量的叠加态,比如3qubit

\[|1\rangle\otimes|0\rangle\otimes|1\rangle\equiv |101\rangle\equiv |5\rangle
\]

CNOT的矩阵如下

\[\mathbf{CNOT}=
\begin{bmatrix}
1&0 &0 &0 \\
0&1 &0 &0 \\
0& 0& 0&1 \\ 0& 0& 1&0
\end{bmatrix}
\]

最后再看个例子巩固一下CNOT门的能力认知:

\[|1\rangle\left(|0\rangle-|1\rangle\right)\rightarrow|1\rangle\left(|1\rangle-|0\rangle\right)
\]

怎么快速得到这个结果呢(所谓快速就是不用去进行矩阵乘法,实际就是利用门的性质,没什么快不快)?控制位1不变,目标位与1异或(上面讲了\(\oplus\)的实际表现是异或),所以1变0,0变1。

受控U门

受控U门就是受控酉门,它把受控非门的能力泛化到了任意的酉矩阵上:当控制位是\(0\)时啥也不干;当控制位是\(1\)时,给目标位应用对应的酉矩阵\(U\)。电路图如下

\[|0x\rangle\rightarrow|0x\rangle\\
|1x\rangle\rightarrow|1,Ux\rangle
\]

比如受控Z门的矩阵:

\[CZ=\begin{bmatrix}
1&0 &0 &0 \\
0&1 &0 &0 \\
0& 0& 1&0 \\ 0& 0& 0&-1
\end{bmatrix}
\]

量子并行机制

上面这些都是量子并行性的体现,也就是把一个函数应用到叠加态的\(|x\rangle\)上

\[|x,y\rangle\overset{U_f}{\rightarrow}|x,y\oplus f(x)\rangle
\]

\(f(x)\)是什么?是给一个辅助qubit应用酉矩阵\(U_f\)得到的,一般辅助位可以使用\(|0\rangle\)

假设我们制备的\(|x\rangle\)在布洛赫球的赤道上:



结果就是

\[\frac{|0,f(0)\rangle+|1,f(1)\rangle}{\sqrt{2}}
\]

看出并行性了吗?结果中同时计算出了每个基向量的受控U门应用结果。

再看一个例子。我们通过使用哈德玛门制备\(|x\rangle\)

\[\frac{1}{\sqrt{2^q}}\sum_{x=0}^{2^q}|x\rangle
\]

然后我们使用受控U门



根据并行机制,每个叠加态从0到\(2^q\)做控制位,目标位函数是\(7^x mod 15\),结果是他们的和。下图是一个近似的例子

\[\frac{1}{\sqrt{r2^t}}\sum_{s=0}^{r-1}\sum_{j=0}^{2^t-1}e^{2\pi isj/r}|j\rangle|u_s\rangle
\]

受控U门的实现

矩阵\(U\)可以写成

\[U=e^{i\alpha}AXBXC
\]

其中\(A\)门、\(B\)门和\(C\)门都是单qubit操作,并且\(ABC=I\)。这样受控U门可以分解成下面这样

这样的分解对于相位估计和其他算法都非常重要,后面会看到。接下来顺理成章的该看看多量子位操作,当然也是基于2qubit门的。

托佛利门(TOFFOLI gate)

托佛利门有两个控制位,可以模拟标准的布尔操作:如果两个控制位都是1,就把目标位反转,所以也称作控控非门

\[(a,b,c)\overset{托佛利门}{\rightarrow}(a,b,c\oplus ab)
\]



托佛利门是幺正的,如果两次使用它,就和哈德玛门一样恢复如初:

\[(a,b,c\oplus ab)\rightarrow(a,b,c\oplus ab\oplus ab)\rightarrow(a,b,c)
\]

可以通过单qubit门和双qubit门结合实现托佛利门



当然实际的实现要复杂得多,是这样的(下面这些门我们都接触过了)



控控非门的矩阵也比较大:

\[\begin{bmatrix}
1&0 &0 &0 &0 &0&0&0 \\
0&1 &0 &0 &0 &0&0&0 \\
0&0 &1 &0 &0 &0&0&0 \\
0&0 &0 &1 &0 &0&0&0 \\
0&0 &0 &0 &1 &0&0&0 \\
0&0 &0 &0 &0 &1&0&0 \\
0&0 &0 &0 &0 &0&0&1 \\
0&0 &0 &0 &0 &0&1&0
\end{bmatrix}
\]

再强调一下,只有两个控制位一起是1才反转:

受控SAT门

看一个受控U门的例子,来自stackexchange,先看3-SAT问题。SAT问题在逻辑学课程和高级算法课程中都会讲到。当变量增加时,它的求解难度急剧上升。

SAT问题是第一个NPC问题

这个范式中的符号的含义可以看我之前的文章《自然演算规则

我们需要创建这样的电路:

\[|\Psi_2\rangle=\frac{1}{\sqrt{2^n}}\sum_{x\in \{0,1\}^n}|x\rangle|f_{SAT}(x)\rangle
\]

也就是我们需要\(n\)个控制位,一起控制第\(n+1\)个目标位



对于上面那个3-SAT的例子,它的线路图是



下面部分是4个工作位和一个目标位,4个工作位是为了存储临时信息来制备目标位。为了重复利用qubit,通常会使用反转逻辑来重置qubit



下面这个就是完整的Grover算法电路图:



因为经过重置,辅助位不变化,所以方程中(上面的方程)通常会把他们忽略掉,而且它们存储的信息也被称为“垃圾”!

量子纠缠

再看一个创建纠缠态的例子,需要用到受控非门

\[\hat{U}_{CNOT}\left(\frac{1}{\sqrt{2}}\left(|\uparrow\rangle+|\downarrow\rangle\right)\otimes|\uparrow\rangle\right)=\frac{1}{\sqrt{2}}\begin{pmatrix}
1& 0& 0 & 0 \\
0 & 1 & 0 &0 \\
0& 0 &0 &1 \\ 0& 0 &1 &0
\end{pmatrix}\begin{pmatrix}
1 \\
0 \\
1 \\ 0
\end{pmatrix}=\frac{1}{\sqrt{2}}\begin{pmatrix}
1 \\
0 \\0\\
1
\end{pmatrix}
\]

上面在使用CNOT前先使用的哈德玛门



对于不同的输入,会产生不同的纠缠结果:

更多例子

上面我们看到了多控制位电路:



实际上目标位也可以多个:



控制位也可以反转:



CNOT也可以同时作用在多目标位:

量子门汇总

不可克隆理论

不可克隆理论表明的是对于任何未知的量子状态,没有任何人能够创建它的精确副本。自然界禁止精确复制任意叠加状态。这个机制对于量子加密特别有用,因为你想知道信息就得测量;但是测量完就坍缩了,就能被发现有人测量了这个状态。

2个qubit的量子门的更多相关文章

  1. [转帖]谷歌宣称首次实现量子优越性,IBM“不服”,中国同行咋看?

    谷歌宣称首次实现量子优越性,IBM“不服”,中国同行咋看? 投递人 itwriter 发布于 2019-10-24 15:46 评论(7) 有306人阅读 原文链接 [收藏] « » https:// ...

  2. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  3. 使用rowid抽取数据方法以及大数据量游标卡住的应对

    平时工作的时候,经常会遇到这种事情,从一个大表A中,抽取字段a在一个相对较小B的表的数据,比如,从一个详单表中,抽取几万个用户号码的话单出来.这种时候,一般来说, 做关联查询: create tabl ...

  4. Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器

    最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制LED发光二极管的闪烁,后来觉得,是不是可以使用HTML5+jQuery等流 ...

  5. 一种简单,轻量,灵活的C#对象转Json对象的方案

    简单,是因为只有一个类 轻量,是因为整个类代码只有300行 灵活,是因为扩展方式只需要继承重写某个方法即可 补充:修正无法处理可空值类型的bug 首先我将这个类称之为JsonBuilder,我希望它以 ...

  6. 一种简单,轻量,灵活的C#对象转Json对象的方案(续)

    本文参考资料 一种简单,轻量,灵活的C#对象转Json对象的方案 [源码]Literacy 快速反射读写对象属性,字段 一段废话 之前我已经介绍了这个方案的名称为JsonBuilder,这套方案最大的 ...

  7. 基于轻量型Web服务器Raspkate的RESTful API的实现

    在上一篇文章中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RESTful API. 模块 首先让我们了解一下"模块&quo ...

  8. ArcGIS Engine开发之量测功能

    1.距离测量 距离测量时,片段长度通过两点之间距离计算得到,全部长度通过片段长度的和计算得到.主要用到INewLineFeedback和IScreenDisplay两个接口. 1)INewLineFe ...

  9. Dapper.NET——轻量ORM

    Dapper.NET使用 http://www.cnblogs.com/yankliu-vip/p/4182892.html 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Da ...

  10. 编写轻量ajax组件01-对比webform平台上的各种实现方式

    前言 Asp.net WebForm 和 Asp.net MVC(简称MVC) 都是基于Asp.net的web开发框架,两者有很大的区别,其中一个就是MVC更加注重http本质,而WebForm试图屏 ...

随机推荐

  1. cesium教程7-官方示例翻译-模型要素选择

    源代码示例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  2. NETCore中实现一个轻量无负担的极简任务调度ScheduleTask

    至于任务调度这个基础功能,重要性不言而喻,大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz,Hangfire,Coravel 这里我们不讨论三方的库如何使用 而是从0开始自己制作一个简 ...

  3. 记一次 .NET某酒店后台服务 卡死分析

    一:背景 1. 讲故事 停了一个月没有更新文章了,主要是忙于写 C#内功修炼系列的PPT,现在基本上接近尾声,可以回头继续更新这段时间分析dump的一些事故报告,有朋友微信上找到我,说他们的系统出现了 ...

  4. 13年过去了,Spring官方竟然真的支持Bean的异步初始化了!

    你好呀,我是歪歪. 两年前我曾经发布过这样的一篇文章<我是真没想到,这个面试题居然从11年前就开始讨论了,而官方今年才表态.> 文章主要就是由这个面试题引起: Spring 在启动期间会做 ...

  5. sass变量的详细使用

    sass变量同javascript变量,可以用来存储一些信息,并且可以重复使用. 先来对比一下css中的变量 同css变量对比 CSS 变量是由 CSS 作者定义的,它包含的值可以在整个文档或指定的范 ...

  6. MQTT 实践总结

    QMQX 文档:https://www.emqx.io/docs/zh/latest/ MQTT 入门:https://www.emqx.com/zh/mqtt-guide 通过案例理解 MQTT 主 ...

  7. 一文带你读懂Arthas实现原理

    一. 前言 Arthas 相信大家已经不陌生了,肯定用过太多次了,平时说到 Arthas 的时候都知道是基于Java Agent的,那么他具体是怎么实现呢,今天就一起来看看. 首先 Arthas 是在 ...

  8. 动态类型语言 VS 静态类型语言

    一. 运行期动态修改类型结构 动态编程语言是高级编程语言的一个类别,在计算机科学领域已被广泛应用.它是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至代码可以被引进,已有的函数可以被删除或是 ...

  9. Servlet转发与重定向的资源路径问题解析

    一. 问题引入 转发和重定向可以说是Servlet中最重要的知识点也不为过,因为它决定着整个向Servlet体系中,执行流程的问题.      转发: request.getRequestDispat ...

  10. Django中的ORM转换为SQL语句日志

    如果想打印ORM转换过程中的SQL,需要在settings中进行如下配置: LOGGING = { 'version': 1, 'disable_existing_loggers': False, ' ...