怎么理解量子比特模型,迁移到量子计算机开始编程
视频链接:
好的现在是2025年的3月最后一天,3月31号,今天我们讨论的话题是量子编程,也就是在量子计算机上,使用特定的语言进行软件开发。当然我们要讨论的,不是,量子编程的某一门语言的技术细节,而是考虑这样一个问题,就是从经典计算机,迁移到量子计算机,这样一个应用平台上以后,我们所需要注意的那些变化的地方,也就是经典比特这个模型,迁移到量子比特这种概率模型上以后,我们,编程的一些基本的逻辑和,方法或者说,潜意识应该是有怎么样的转变的,呃这是我们今天要讨论的问题.
1 基础概念
首先呢,我们看量子比特它的这个概念,以及它的一些性质,我们和量子比特相关的一些操作,呃量子比特呢,是量子计算机,量子计算当中的信息的基础对象,它特征就是,可以容纳所有可能状态的叠加,那每一个叠加,都是有效的量值为状态啊,也就是说,它可以同时对2N次方个值进行编码,这个n是量子比特的位数有位宽,我们看这个两比特的经典,这个两比特的经典比特,它可能取值是00|01|10|11,这四个取值中的任何一个,它都是可以取到的,但在同一时刻,它只能取其中的一个,我们要完整的表达它的话,我们需要这个4对,按两比特的量,经典比特来来进行表达,而对于量子比特而言,它可以同时叠加所有的取值,也就是说这两比特它既可能取00,也可能取01,也可能取10,还可能取11,呃,就在我们的测量发生以前,我们是无法确知,它到底是取了什么值的,我们只只能够知道,这两比特的取值啊,取不同的状态值的概率啊,通常情况下都是各占25%,而只有通过测量,才能够知道,这两个量子比特到底是什么值。
这上述过程就涉及到了两个操作概念,就是叠加和纠缠,我们分配了一个量子比特以后,将它设为初态,就类似于我们在经典计算机上,将一个变量设置为0值,然后使用h们hand这个操作以后,将量子比特进入到叠加态,这个时候他的取值就不确定了啊,通常就是0和一的取值各占50%,我们只有通过呃,h们的逆操作让他回到出台,这时候它的值是确定的,或者通过测量,将它的叠加态坍缩到经典比特状态,另外一个操作是纠缠啊,我们经常听到量量子量子纠缠,这个操作实际上就是把两个量子比特,让他们发生纠缠,进入纠缠态,嗯这个Q1的状态取决于Q0,在Q0上的任何变化都会传递到Q1.

2 应用举例
呃有了这样一个基础概念以后,我们就可以来看,在量子对量子比特而言的读写操作,是什么样的,经典模型当中,我们要去获取一个比特的值,我们需要发起读行为,而在量子模型当中,读意味着要测量量子比特的状态,呃这里是量子比特的这个数学描述,可以理解为阿尔法方,这个阿尔法或或者和,和这个Beta是取0或者一,这是概率的平方根,这个阿尔法方意味着取0的概率,β方意味着取一的概率,嗯阿尔法加别的等于一些,我们测量量子比特以后,嗯它有阿尔法方的概率返回0,有别的方概率返回一,这个也就是说,我们的读就意味着测量,测量,意味着按照量子比特这种概率分布,来返回测量结果,所以读之前,我们是不确定量子模型的状态的,读之后量子比特的状态就确定了,而且哎如果,这个行为发生重复的话,那他的这个返回的值的概率分布,和量子比特的状态描述,是逐渐接近的;
然后是写操作,写操作就和纠缠态有些关系了,经典模型,让我们对量子比特发起写,在量子模型当中呢,呃,就意味着要去测量量子比特的状态,如果它和我们写的值不一致,就反转他的,哇这里这不是相位啊,是反转他的值,比如说从0反转的e状态,e状态反转环绕零状态,那这种变化或者这种值的变化,状态变化,就会传递到与他纠缠的量子比特上,比如说我们将呃,这个Q0和Q1这两个纠缠,纠缠的量子中的一个Q0,呃改变了Q0的状态,那么Q1的状态也会随即发生改变.
2.1 量子加密通信
那这些特性到底有什么用呢,我们为什么要使用量子计算机,来进行编程,这样或者说它有什么好处呢。
呃通常有这样一些,比如说加密通信,我们通常说量子量子,这个量子密钥,你可以保证,我们的通信是不可被窃听的,或者即使窃听发生了,我们也能够及时的感知到,这种窃听行为,这在此前是不可想象的,但到底这个过程是怎么样的呢,就是基本的原理,就是此前刚才我们说的,测量对量子比特的影响,比较经典的量子啊,这个模型当中,我们发起了读以后,在量子模型的下,就是要测量量子比特的状态,这一轮呢,量子比特状态是不确定的,它是一个叠加态,来测量以后返回的那个值是确定的,那这意味着中间发生变化,从不确定状态进入到了确定状态,也是测量后,这个量子比特的状态唯一确定了,也就是意味着叠加态坍缩了,或者说测量会破坏量子比特的叠加态,
下图左侧展示了收发信息和感知窃听的过程,那发送者将一个量子比特,呃进入叠加态以后,传递给接收者,接收者再通过这个h逆操作,呃得到Q0的发送者发送过来的,发送之前的他要发送那个信息,那一比特对应的状态,而如果这个中间有一个窃听者,偷偷地测量了这个发送的量子比特,那么它就会导致叠加在坍缩,而这个坍缩以后的信息,又又是没有经过这个标准的逆操作的,那么它就无法恢复原始信息,而这个窃听发生了以后呢,我们在接收方拿到了量子比特,由于它是坍缩以后的量子比特,我们再通过逆操作,也无法恢复这个信息,如果我们在信息当中,隐藏那么一个标记,我们如果无法正常的恢复这个标记,那么就认为这个过程中,可能发生了窃听,而对窃听者而言他,即使知道,要知道这是一个叠加态的量子,呃他知道要进行逆操作,但对于一长串的这个量子比特而言,他不知道哪些量子比特进入了叠加态,那么他也不能够正确的获取信息,所以一方面他无法获取信息,另一方面他有了这个窃听的动作以后,我们就能够知道呃,他做了这件事情,呃就是有双重保险,保证我们的信息不会被窃听,

2.2 量子加速
另外一方面就是量子计算的加速功能,比如说它可以对我们的搜索加速,甚至可以做到,指无序数据的无遍历搜索,就不需要看所有的数据,都能够找出来,其中我们要符合条件的目标,比如说量子计算当中的Grover算法,它对于无序数据的搜索,时间复杂度低至了O(根号n),在经典计算机的情况下,对于无序数据,至少最优的情况,当然是第一个目标就找到了,是O(1) 当然那是最理想的情况下,但一般情况下,都是需要把整个数据集进行遍历的,也就是时间复杂度应该是o n,而使用Grover算法,量子计算实现的grover算法呢,它的时间复杂度可以低到o根号n,也就是意味着不需要逐个的去看,不需要把所有数据看一遍,都能够找到目标,那这个过程到底怎么样呢,就比如说像下面这样,在,N等于2的n次方个无序数据当中,搜索目标,我们需要准备一个n位的量子比特,嗯然后让他们进入叠加态,使用Orcale操作,将所有的复调件的量子态进行反向,然后呢再进行操作,放大这个概率的放大,也就是做这么一个呃非0状,它的这个-1相移,那这个过程进行多次迭代啊,这个过程,这个这这一组操作实际上就是在扩散,就就要放大,目的就是放大目标状态的概率幅,然后减小非目标状态的概率幅,然后这个多次迭代以后呢,那个,更可能是目标的那个东西,他的概率就会相当突出,鹤立鸡群,然后我们只需度量,找概率最大的那个目标,那个那个那个对象,然后再看他是不是目标,如果不是的话,我们就重新来,然后直到找出符合我们条件的,确定是目标的那个,当然这个过程当中,没有确定性,我单看那个表述都不严谨了,就是我们只是把那个,那某某一个编码,我们最终找出来那个东西,它只是说非常有可能是目标,但是我们永远不能说,不能找到那个确定式目标,所以,我们需要对这个迭代的结果进行度量,然后再去比对它是不是目标。

嗯,这这个,这个就和我们经典的状态也不一样了,其实所有东西都是不确定的,我们只是通过这个概率来进行,检索就有点像我们再用眼睛,寻找这个符合条件目标一样,就像计算机视觉当中来进行图片,其中的目标的分类,我们最后生成的结果,一定是一组概率值,我们只是找认为概率最大的那个,是我们要找目标,那这个过程呢,实际上就不需要遍历集合了然,后,根据一定的特征来进行目标的发现,Grover的迭代过程,就类似于,增强目标和其他元素的对比度,一眼就能够看到。
3 量子编程语言
嗯说那么多,我们还没有看这个量子编程语言,到底是什么样的,以这个q#为例,这是微软推出的,呃一个量子编程语言,它的程序是像下面这样的,这个程序呢,是将两个量子比特,置为叠加态和纠缠态,呃这个和我们一般的编程语言,没有太大差异,因为呃,高级语言就是对机器进行抽象,这里就对量子计算机进行抽象,我们做的也是一些,函数的调用,其中包含了一些量子计算的特定操作,呃我们只要有了相应的概念,就可以去使用它。
这里我们逐行说一说,这是分配两个量子比特,就有点像为变量分配空间,然后呢是将Q1,呃进入叠加态,然后呢这里,将Q1和Q2这两个量子比特进行纠缠,让Q2的值取决于Q1,这个Domber信,这是一个方法,它可以展示嗯,量子计算机的状态,还包括量子的状态,这个方便我们进行调试,呃这个不会测量,它只会展示这个量子可能状态,比如说这里展示出量子,这个量子比特的取值可能是00,可能是11,各站的这个概率都是50%,嗯这个呈预言的结果就是,然后将Q1 Q2的状态进行测量,测量以后得到是11,这里呢就奇怪,这个Q1 Q2两个比特,为什么不是四种结果呢,这个这里就很关键,就是只让Q1进行了,进入了叠加态,那么只有Q1,他的状态是零一不确定的,那么这里就只有Q1是01变的,而Q2本身是一个初态的,它没有进入叠加的状态,然后呢它又和Q1进行了纠缠,那么它的值就取决于Q1,所以Q0 Q2值一直和Q1保持一样,所以它们的取值要么是00,要么是11,这里已多次运行,也可以看到了,这个测量结果不是00就是11,所以测量会导致,导致这个坍缩传递到纠缠量子比特,测量了两个纠缠量子比特的状态,他不是00呢就是11。
4 总结
所以这个量子编程的最大的不同,就是基础的模型发生的变化,由量子比特的这种呃状态的叠加性,然后量子比特之间的这种纠缠,以及我们可以通过这种概率的放大,来进行目标的查找,都使得量子编程,和经典的编程有所不同,嗯但对于软件开发人员而言,了解了这些基本的概念以后,就仍然可以以先前的,那些软件开发的方式,进行开发,因为软件本身也是对机器进行抽象,了解原理,就是帮助我们更好地去寻找,解决特定问题的实现方法,嗯就这么多,拜拜。