所谓量子线路,从本质上是一个量子逻辑门的执行序列,它是从左至右依次执行的。即使介绍了函数调用的思想,也可以理解为这是一种简单地内联展开,即把函数中的所有逻辑门插入到调用处,自然地,可能会考虑在量子计算机的层面是否存在类似于经典计算机中的循环和分支语句。因此,就有了QIF和QWHILE。
作为QIF和QWHILE的判断条件的对象,并不是量子比特,而是一个经典的信息,往往,这个经典的信息是基于测量的。在量子程序执行时,测量语句会对量子比特施加一个测量操作,之后将这个比特的测量结果保存到经典寄存器中,最后,可以根据这个经典寄存器的值,选择接下来要进行的操作。例如:
H->q
Meas q->c
Qif(c == Zero) H->q
这样的量子程序表示的是对q进行Hadamard门操作之后,测量它;如果测量的结果是0,则再做一个Hadamard门。从这个例子可以继续延伸到Qif可以包裹的一系列语句,而不仅仅是一个,比如:
Qif(c == Zero)
{
H->q
CNOT(q0,q1)
......
}
或者也可以设置Qelse语句,它表示如果判断条件为非,则要执行的语句。例如:
Qif (c == Zero) CNOT(q0,ql)
Qelse CNOT(ql,q0)
再或许可以综合两个、多个量子比特的测量结果,对它们进行布尔代数运算,进行判断。另一种情况是将N个量子比特的测量结果理解为一个N-bit整数,之后再与其他整数进行比较。
例如:
Qif (cl == Zero && c2 == One)
{
H->q
CNOT(q0,q1)
......
}
上述规则对于QWhile来说也是一样,比如一个随机计数的代码:
c = One
n = Zero
QWhile(c) {
H->q
Meas q->c
n++
}
这个程序的含义是每次对qubit执行Hadamard门并测量,如果测量结果为1则继续该过程,测量结果为0则退出循环。这表明测量得到1的次数,每次都有1/2的概率,给定计数器n+1,最终可以取得n的值。重复这个实验,可以拟合出一个负指数分布。
另外,QIf和QWhile是可以相互嵌套的,形成多层的控制流。
上述的是“量子信息,经典控制”,那么有没有“量子信息,量子控制”呢?对于IF而言,答案是有的。
定义“量子信息,量子控制”过程是一组量子比特的操作,是由另一组比特的值决定的。一个最简单的例子就是CNOT门,对于CNOT(q0,q1)而言,q1是否执行NOT门是由q0的值决定的。基于量子信息的IF的性质如下:
第一,这种控制可以叠加。如果判断变量本身处于叠加态,那么操作的比特也会出现执行/不执行逻辑门的两种分支,由此,判断变量和操作比特之间会形成纠缠态。例如:
H->q1
CNOT q1->q2
此时得到的量子态是|00〉+ |11〉,这样在CNOT后,就把q1这个判断变量和q2这个操作比特纠缠了起来。
第二,控制变量和操作比特之间不能共享比特。即,CNOT(q0,q1)中控制位和目标位一定不能为相同的量子比特。
基于量子信息的IF在实际的量子算法中使用得比较少,因此大部分量子软件开发包都没有加入这个功能。在Shor算法和其他基于布尔运算的线路中会使用这个思想,比如对是否求模的判断,但实际中,一般是利用CNOT门的组合来实现的。
对于WHILE而言,目前还没有找到一个合适的定义,因为量子信息不确定,那么很有可能会在WHILE中产生无法停机的分支。以经典控制的QWhile作为例子,如果控制变量c是一个量子比特,那么每次都会有一个概率使得这个循环继续下去。因此,为了执行这个序列,就需要无限长的操作序列,这导致从物理上无法定义这种操作。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。