有概率的随机数_〇〇Q#(三):随机数

cb5d5435299971f155127e8e5f35b8d5.png

〇〇Q#(三):随机数

本文Github地址。由于Github渲染Jupyter里的公式有些问题,建议下载下来查看,这样的话,下面的代码也可以直接运行。

目录:

jks-liu/quantum​github.com
154cba92bb49918c6d96ac25a093c115.png
Jks Liu:〇〇Q#:前言​zhuanlan.zhihu.com

这篇文章中,你会学到以下内容

关于量子算法

  • 随机数生成算法
  • 量子的两个基本状态
  • 初始化一个量子比特
  • 测量一个量子比特
  • 复位一个量子比特

关于数学

  • 向量/矩阵的共轭转置,
  • 向量的内积,
  • 向量的范数(Norm),

关于Q#

  • Q#的operation结构
  • 使用Message打印Debug信息
  • 分支(if)语句
  • 注释//

随机数算法的实现

operation random_number(): Unit {

    using (q=Qubit()) {

        // Q#中会自动将新申请的量子比特初始化为Zero

        H(q);

        if (M(q) == Zero) {

            Message("随机数是Zero");

        } else {

            // M(q)是One

            Message("随机数是One");

        }

        Reset(q);

    }

}
  • random_number

量子算法解析

首先,量子比特(qubit)有两个基本状态,一个是Zero,一个是One。这两个都是Q#的关键字。

算法核心有以下三步:

  1. 初始化qubit 使用q=Qubit()向系统申请一个qubit,并将其状态初始化为Zero
  2. 叠加态 使用H(q)将qubit置于叠加态;
  3. 测量 使用M(q)测量qubit。测量处于叠加态的qubit,会有一半的概率得到Zero,一半的概率得到One

数学描述

数学上,ZeroOne分别对应一个向量,在量子力学语境中,一般称其为态矢(State Vector)

$

$

下面我们来复习一下数学知识。

共轭转置(Adjoint,Hermitian(Conjugate) transpose)

我们用

表示
的复数共轭(conjugate)。

对于矩阵

(不要求方阵),其共轭转置
符合以下定义:
。比如:

$

$

$

$

共轭转置这个定义和大家熟悉的转置有区别,我们用

表示
的转置。

向量的内积与范数(Norm)

若无特殊说明,向量默认为列向量

对于内积大家应该对这个概论比较熟悉。我这里拿出来强调的原因是,好像大部分人只接触过实数域的情况,复数域上有些需要注意的地方。

在实数域上,向量

的内积
。其满足交换率。

在复数域上,向量

的内积
。其不满足交换率。但显然

不追求严谨的话,范数可以理解为绝对值,或向量的模。显然向量

(复数域上)的范数

量子比特

下面我们回到态矢。态矢也是一个复数域的向量,所以以后若无特殊说明,向量都是复数域上的。

对于单个量子比特q,记其态矢为

。那我们有以下结论:
  1. 当我们测量q(判断它是Zero还是One)时,有
    的概率是
    Zero,有
    的概率是
    One;
  2. 显然,考虑概率的和必为1,

量子算法再解析

前面我们说过,本算法有三步:

  1. 初始化qubit
  2. 叠加态
  3. 测量

量子比特q的态矢变化如下

初始化会将其态矢设为Zero,即

$

$。

为了得到叠加态,我们会用到一个矩阵

,将其与原态矢
相乘,使其变为

$

$

上面出现的矩阵乘法就当大家都是会的,我就不细说了。

显然,根据上面讲的,当测量这个qubit时,各有一半的概率获得ZeroOne

以下为运行上面算法的可能结果之一:

%simulate random_number
随机数是One



()

Q#语法

上面的代码很简单,相信大家肯定没问题的。就强调几个

  • 以分号结尾;
  • 变量q的作用域只在using词法块里;
  • 语句H(q)就直接改变了q的状态,无须写成q=H(q)之类的赋值语法。当然了,你想写也写不了;
  • 注释以//开头。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值