概述
本文将主要介绍Bernstein-Vazirani算法的基本概念、Bernstein-Vazirani问题以及该问提的经典与量子解决方式。本文对Bernstein-Vazirani算法的实现将主要使用启科量子的配套产品量子编程框架QuTrunk、可视化量子编程软件QuBranch以及启科量子自研的量子后端设备QuBox。
1.Bernstein-Vazirani算法
Bernstein-Vazirani算法是由Ethan Bernstein和Umesh Vazirani于1992年提出的一个算法。该算法主要用于求解编码函数,是一个条件限制版的Deutsch-Jozsa算法。也就是说Bernstein-Vazirani的工作建立在Deutsch和Jozsa早期工作理论上来探索量子查询复杂度。他们对该领域的贡献主要为编写出一个用于隐藏字符串问题的量子算法。已经有人证明了Bernstein-Vazirani算法时间复杂度在BQP和BPP之间,该算法的非递归量子查询复杂度仅为11。这一量子算法的最核心价值在于加快了查询速度, 而不是执行时间本身。
那么何为BQP复杂度和BPP复杂度?
在计算复杂性理论中,BQP(bounded-error quantum polynomial time)是量子计算机在多项式时间内可以解决的一类决策问题,所有实例的错误概率最多为1/3。BPP这个每个字母分别代表"Bounded-error"(有限错误),“Probabilistic”(机率的),“Polynomial time”(多项式时间)。BPP是在多项式时间内以概率图灵机解出问题的集合, 并且对所有的输入、输出结果出错的概率在1/3之内。当一个问题属于BPP问题集合时,则存在一个多项式时间内的算法允许随机决定,且对于该算法的任何输入都必须在错误率为1/3的概率下给出正确判断。
2.Bernstein-Vazirani问题
假设一个函数f(x)满足 ‘ f ( x 0 , x 1 , x 2 … … ) ‘ `f({x₀,x₁,x₂……})` ‘f(x0,x1,x2……)‘,以x作为输入,并返回结果0或1。现在给定一个输入x,函数 ‘ f ( x ) = x ⋅ s m o d 2 ‘ `f(x)=x·s mod 2` ‘f(x)=x⋅smod2‘,其中 ‘ x ∈ 0 , 1 , s ∈ 0 , 1 n ‘ `x∈{0,1},s∈{ {0,1}}^n` ‘x∈0,1,s∈0,1n‘,最终预计会找到s。因此,Bernstein-Vazirani算法目标为求解s。
2.1经典方式求解
采用经典方式求解Bernstein-Vazirani问题,所列表达式为 ‘ f s ( x ) = s ⋅ x m o d 2 ‘ `f_s(x) = s \cdot x \mod 2` ‘fs(x)=s⋅xmod2‘。给定一个输入x,隐藏位串 s 可以按输入序列使用算子oracle查找。如输入x为100…0,010…0,001…0,000…1,经典算法求解方式只能查询生成1位信息,任意隐藏字符串s具有n位信息,所以经典查询的复杂度为O(n)。
示例:当n=2时的Bernstein-Vazirani问题。经典设元素为两位 ‘ x 0 x 1 ‘ `x_0x_1` ‘x0x1‘,s向量表示为 ‘ s 0 s 1 ‘ `s_0s_1` ‘s0s1‘,所代表函数为4种类(00,01,10,11)。此时的Bernstein-Vazirani问题为 ‘ f s ( x 0 x 1 ) = 〈 s , x 〉 = s 0 x 0 ⊕ s 1 x 1 ‘ `f_s(x_0x_1)=〈s,x〉=s_0x_0⊕s_1x_1`