2个qubit的量子门
量子计算机就是基于单qubit门和双qubit门的,再多的量子操作都是基于这两种门。双qubit门比单qubit门难理解得多,不过也重要得多。它可以用来创建纠缠,没有纠缠,量子机就不可能有量子霸权。
CNOT门(受控非)
C是受控Controlled的首字母
受控非们作用在两个qubit上,一个叫控制位\(|\text{x}\rangle\),一个叫目标位\(|\text{y}\rangle\)。如果控制位是\(0\),目标位不变;如果控制位是\(1\),目标就反转:

所以有
\]
受控非们的图示是

实现的能力是
\]
\(\oplus\)是模2加法(也就是异或)。更简单的写法是
\]
控制位可以是多个基向量的叠加态,比如3qubit
\]
CNOT的矩阵如下
\begin{bmatrix}
1&0 &0 &0 \\
0&1 &0 &0 \\
0& 0& 0&1 \\ 0& 0& 1&0
\end{bmatrix}
\]
最后再看个例子巩固一下CNOT门的能力认知:
\]
怎么快速得到这个结果呢(所谓快速就是不用去进行矩阵乘法,实际就是利用门的性质,没什么快不快)?控制位1不变,目标位与1异或(上面讲了\(\oplus\)的实际表现是异或),所以1变0,0变1。
受控U门
受控U门就是受控酉门,它把受控非门的能力泛化到了任意的酉矩阵上:当控制位是\(0\)时啥也不干;当控制位是\(1\)时,给目标位应用对应的酉矩阵\(U\)。电路图如下

|1x\rangle\rightarrow|1,Ux\rangle
\]
比如受控Z门的矩阵:
1&0 &0 &0 \\
0&1 &0 &0 \\
0& 0& 1&0 \\ 0& 0& 0&-1
\end{bmatrix}
\]
量子并行机制
上面这些都是量子并行性的体现,也就是把一个函数应用到叠加态的\(|x\rangle\)上
\]
\(f(x)\)是什么?是给一个辅助qubit应用酉矩阵\(U_f\)得到的,一般辅助位可以使用\(|0\rangle\)

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

结果就是
\]
看出并行性了吗?结果中同时计算出了每个基向量的受控U门应用结果。
再看一个例子。我们通过使用哈德玛门制备\(|x\rangle\)
\]
然后我们使用受控U门

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

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

这样的分解对于相位估计和其他算法都非常重要,后面会看到。接下来顺理成章的该看看多量子位操作,当然也是基于2qubit门的。
托佛利门(TOFFOLI gate)
托佛利门有两个控制位,可以模拟标准的布尔操作:如果两个控制位都是1,就把目标位反转,所以也称作控控非门:
\]

托佛利门是幺正的,如果两次使用它,就和哈德玛门一样恢复如初:
\]
可以通过单qubit门和双qubit门结合实现托佛利门

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

控控非门的矩阵也比较大:
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问题

这个范式中的符号的含义可以看我之前的文章《自然演算规则》
我们需要创建这样的电路:
\]
也就是我们需要\(n\)个控制位,一起控制第\(n+1\)个目标位

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

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

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

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

量子纠缠
再看一个创建纠缠态的例子,需要用到受控非门
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的量子门的更多相关文章
- [转帖]谷歌宣称首次实现量子优越性,IBM“不服”,中国同行咋看?
谷歌宣称首次实现量子优越性,IBM“不服”,中国同行咋看? 投递人 itwriter 发布于 2019-10-24 15:46 评论(7) 有306人阅读 原文链接 [收藏] « » https:// ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 使用rowid抽取数据方法以及大数据量游标卡住的应对
平时工作的时候,经常会遇到这种事情,从一个大表A中,抽取字段a在一个相对较小B的表的数据,比如,从一个详单表中,抽取几万个用户号码的话单出来.这种时候,一般来说, 做关联查询: create tabl ...
- Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器
最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制LED发光二极管的闪烁,后来觉得,是不是可以使用HTML5+jQuery等流 ...
- 一种简单,轻量,灵活的C#对象转Json对象的方案
简单,是因为只有一个类 轻量,是因为整个类代码只有300行 灵活,是因为扩展方式只需要继承重写某个方法即可 补充:修正无法处理可空值类型的bug 首先我将这个类称之为JsonBuilder,我希望它以 ...
- 一种简单,轻量,灵活的C#对象转Json对象的方案(续)
本文参考资料 一种简单,轻量,灵活的C#对象转Json对象的方案 [源码]Literacy 快速反射读写对象属性,字段 一段废话 之前我已经介绍了这个方案的名称为JsonBuilder,这套方案最大的 ...
- 基于轻量型Web服务器Raspkate的RESTful API的实现
在上一篇文章中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RESTful API. 模块 首先让我们了解一下"模块&quo ...
- ArcGIS Engine开发之量测功能
1.距离测量 距离测量时,片段长度通过两点之间距离计算得到,全部长度通过片段长度的和计算得到.主要用到INewLineFeedback和IScreenDisplay两个接口. 1)INewLineFe ...
- Dapper.NET——轻量ORM
Dapper.NET使用 http://www.cnblogs.com/yankliu-vip/p/4182892.html 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Da ...
- 编写轻量ajax组件01-对比webform平台上的各种实现方式
前言 Asp.net WebForm 和 Asp.net MVC(简称MVC) 都是基于Asp.net的web开发框架,两者有很大的区别,其中一个就是MVC更加注重http本质,而WebForm试图屏 ...
随机推荐
- JAVA基础-流程控制、字符串
一.java基础 1.java主类结构 package com.study.again001; 包名public class helloword { 类名 static String s1 = &qu ...
- 什么是NASM
什么是NASM NASM是一个汇编器的名称,全称是Netwide Assembler,支持x86与x64架构的CPU(注意不支持ARM架构). 我们知道,在x86和x64架构上有多个操作系统,比较流行 ...
- ansible系列(23)--ansible的when控制语句
目录 1 when控制语句 1.1 根据不同操作系统安装相同的软件 1.2 为不同centos版本安装httpd软件 1.3 为特定的主机添加Nginx仓库 1.4 判断服务是否正常运行 1 when ...
- linux上PGI编译器安装
1.PGI编译器介绍 随着英伟达的收购,PGI编译器已经已经并入NVIDIA HPC SDK.后面直接安装NVIDIA HPC SDK即可. NVIDIA HPC SDK提供了使用标准的C/C++和F ...
- 日常Bug排查-连接突然全部关闭
日常Bug排查-连接突然全部关闭 前言 日常Bug排查系列都是一些简单Bug的排查.笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材. Bug现场 最近碰到一个问题,一台机器上的连接数在达到 ...
- sass 导入@import详解
@import Sass 拓展了 @import 的功能,允许其导入 SCSS 或 Sass 文件.被导入的文件将合并编译到同一个 CSS 文件中,另外,被导入的文件中所包含的变量或者混合指令 ( ...
- winform——windows 服务的安装 卸载 启动 停止
安装服务和卸载服务采用process启动命令行的方式.启动服务和停止服务用到了 System.ServiceProcess.ServiceController这个类. 程序是这样运行的,首先启动服 ...
- pwn杂项之linux命令执行
通常pwn题目,时常会考到对Linux命令的一些使用,比如当cat被禁用的时候,可以使用tac,或者别的命令代替 下面是buu上的应该题目,考察的就是对liunx命令的理解,以及对程序的分析. 题目地 ...
- Android 13 - Media框架(33)- ACodec(九)
关注公众号免费阅读全文,进入音视频开发技术分享群! 前一节我们学习了Output Format Changed事件是如何上抛并且被处理的,这一节我们紧接着来学习OutputBuffer是如何上抛并且被 ...
- CMake 进行多项目中dll的编译和链接
前言(maybe废话) 最近正在学习cherno的游戏引擎教程,他使用的是vs进行构建的,后面换了premake.而我用的是vscode+cmake,所以在构建整个项目的时候踩了不少的坑,也找了很多资 ...