首页 > 编程语言 >量子搜索算法

量子搜索算法

时间:2023-06-03 23:01:01浏览次数:59  
标签:叠加 frac sqrt 搜索算法 rangle 量子

建议大家去看大佬的原文:量子搜索算法

量子搜索算法是什么?

假设我们现在有这样一个问题:寻找一个N位的二进制解串:\(X=(x_1x_2...x_n)\),使其满足条件:\(F(X)\leq C\)。其中\(F(X)\)可以是任一函数,\(C\)可以是一个足够小的常数,但保证至少存在一个解满足条件。

对于一般情况而言,只能遍历解集中所有的可行解,逐一判断是否满足条件,如果是,则输出,反之继续遍历。这样做的话,算法的时间复杂度显然是\(O(2^n)\),或者用\(N\)来表示解集大小,则时间复杂度为\(O(N)\)。

显然当一个问题的解集极大时,以现有的计算机的算力无法遍历所有的解来选择人们想要的。

有没有办法改善这一状况呢?当然有,但在某些方面也一定会有补偿。比如,若已经将解集根据对应函数值的大小进行排序,那么要找到一个特定的解只需要二分搜索\(O(log_2 N)\)即可。或者使用进化优化算法,给出一个让人满意的解,但不保证解是最优的。或者选择力大砖飞,使用更多的CPU核心并行计算。

并行,并行?诶,等等。在我们的物理世界中,有一种现象似乎是天然地自带并行属性,那就是量子叠加态。以氢原子核外电子举例,一个电子并不固定在一个轨道(或者能级)状态上,而是同时处在多个轨道状态的叠加状态上,你去测量时,便以一定的概率从叠加态坍塌到一个基态上,并且不再自发回到叠加态了。

我们在电子计算机中,用电路中的高低电平来表示不同的状态,我们把它抽象为二进制的数学表达,然而电子计算机没用量子特性,那么对于同一个1比特的电路,在一个时刻,就只能处于一种状态(高电平或低电平),也就只能表示为1或者0. 但对于量子电路,一个比特一个时刻,可以同时处在0和1的状态。
如果有n个比特呢?那么量子电路可以同时处于\(2^n\)个状态。那么我们想要的解,不过是叠加态中的一个状态,只要我们能够在测量的时候让量子电路从叠加态坍塌到这个基态,就找出了这个解。

量子搜索算法,就是最大化从叠加态坍塌到对应特定解的那个基态的概率的算法。

量子搜索算法的细节

我们首先要得到一个包含所有解的叠加态。
如何得到?
可以让所有的状态0通过哈达玛门:
image
这样得到的,是一个包含所有解状态,且每个状态的幅值都相同的叠加态:

\[\frac{\sum_{x=0,1}|x_1,x_2,...,x_{n}\rangle}{\sqrt{2}^n} \]

我们将其写为:\(|E\rangle\),并令\(N=\sqrt{2}^n\)
另外,想要的解的状态,我们写为:\(|S\rangle\)
我们从\(|E\rangle\)开始,试图通过一些方式使其转变为\(|S\rangle\),中间状态写为\(|\psi\rangle\),如下图:
image
别忘了,\(|S\rangle\)是我们未知的,也就是说我们要通过一些手段,在不知道\(|S\rangle\)的情况下,依然使\(|\psi\rangle\)向\(|S\rangle\)靠近。
这个手段之一就是对称(反射)。
如下图:
image
直接说结论,\(|\psi\rangle\)以\(|S\rangle\)为轴反射,再以\(|E\rangle\)为轴反射,再反转,得到\(|\psi^{'}\rangle\),此时向\(|S\rangle\)靠近了\(2\Delta\)的角度
那么\(\Delta\)是多少呢?请看下图:
image
作虚线垂直于\(|S\rangle\),那么虚线和\(|E\rangle\)的夹角即为\(\Delta\)

当N较大时:
\(\Delta=arcsin(\frac{1}{\sqrt(N)})\approx\frac{1}{\sqrt(N)}\)
可能你会问\(\frac{1}{\sqrt(N)}\)哪里来的,那是因为\(|S\rangle\)在\(|E\rangle\)上的投影长度就是\(\frac{1}{\sqrt(N)}\)。

当我们把\(|\psi^{'}\rangle\)当作新的\(|\psi\rangle\),并继续这样的操作足够多次,便能够到达\(|S\rangle\)附近,而且相距角度小于等于\(\Delta\)。
重复的次数应该为:\(round(\frac{\pi}{4\Delta}-\frac{1}{2})\)
这个重复被称为Grover迭代

如何以\(|S\rangle\)或\(|E\rangle\)为轴反射

可以按照下面的量子电路完成以\(|S\rangle\)为轴的反射
image
ancilla是用来储存控制状态的量子位。

\(C_s\)用来判断\(|x\rangle\)中的\(|S\rangle\)分量,如果存在\(|S\rangle\),则不对其做任何操作,反之,对其取反。如此,相当于\(|x\rangle\)对\(|S\rangle\)做了一次对称。

下图的量子电路是一个\(|S\rangle=|0\rangle\)特例
image

那如何以\(|E\rangle\)为轴反射呢?

实际上也简单,\(|x\rangle\)可以分解为平行\(|E\rangle\)和垂直\(|E\rangle\)的两部分,将垂直\(|E\rangle\)的那部分取反即可。
image
如上图,由于哈达玛门的逆还是自己,所以\(|x\rangle\)的\(|E\rangle\)分量通过哈达玛门转换为全0,此时再以0为轴进行反射,相当于对垂直\(|E\rangle\)的分量取反,最后再经过哈达玛门,将\(|E\rangle\)分量从0恢复回来。
总体来看,就是以\(|E\rangle\)为轴反射了。

总结

量子搜索算法的时间复杂度仅为\(O(\sqrt{N})\)
正确率却高达\(1-\frac{1}{N}\)
当搜索空间较大时,具有很好的效果。

标签:叠加,frac,sqrt,搜索算法,rangle,量子
From: https://www.cnblogs.com/Cnoized/p/17454931.html

相关文章

  • 搜索算法
    搜索算法搜索寻路可视化传送门1传送门2网页嵌入如下(拖动星星以改变起点)##DijkstraBFS启发式搜索A*......
  • m基于钱搜索算法的BCH编译码matlab仿真,仿真输出误码率曲线和编码增益曲线
    1.算法仿真效果matlab2022a仿真结果如下:  2.算法涉及理论知识概要 BCH编译码是一种纠错能力强,构造简单的信道编译码。BCH编译码的生成多项式可以由如下的式子表示:  ①BCH码是一种纠错码、线性分组码、循环码。 ②需要传输信息位数:k ③纠错能力:t ④总码长......
  • m基于Berlekamp-Massey钱搜索算法的BCH译码误码率matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要      BCH编译码是一种纠错能力强,构造简单的信道编译码。BCH编译码的生成多项式可以由如下的式子表示: ①BCH码是一种纠错码、线性分组码、循环码。 ②需要传输信息位数:k ③纠错能力:t ④总......
  • 第K短路(A*算法 启发式搜索算法)
    【启发式算法】定义函数h[x]=g[x]+f[x];其中g[x]是x结点的真实值,f[x]是x结点的估计剩余代价值,h[x]就是当前方案的总估计值。在BFS过程中,以最优价值优先遍历,可以减小时间复杂度,并简化问题。A*算法的优势就是,对当前结点做一个价值估计,取出堆中最优的结点进行下一次遍历。在求......
  • [P7738][NOI2021] 量子通信
    [NOI2021]量子通信题目背景由于评测性能差异,本题时限+0.5s。题目描述小Z正在自学量子计算机相关知识,最近他在研究量子通信章节,并遇到了一个有趣的问题。在该问题中,Alice和Bob正在进行量子通信,它们的通信语言是一个大小为\(n\)的字典\(S\),在该字典中,每一个单词\(s_i......
  • 2-3 改写二分搜索算法
    设a[0:n-1]是已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。测试数据(自己写的):61234567输出:i=5,j=-16123456-1输出:i=-1,j=......
  • 搜索算法
    //DPS(深度搜索)//n-皇后问题//方法一(与数字全排列相似)#include<bits/stdc++.h>usingnamespacestd;constintN=80;intn,res=0;charQ[N][N];boolcow[N],dg[N],rdg[N];//dg,rdg是对角线和反对角线,cow是列;voiddfs(intu){if(u==n){res++;......
  • SSA麻雀搜索算法优化KELM核极限学习机(SSA-KELM)回归预测MATLAB代码 代码注释清楚。
    SSA麻雀搜索算法优化KELM核极限学习机(SSA-KELM)回归预测MATLAB代码代码注释清楚。main为主程序,可以读取EXCEL数据。很方便,容易上手。(电厂运行数据为例)温馨提示:联系请考虑是否需要,程序代码商品,一经售出,概不退换。ID:9845664615529013......
  • 基于麻雀搜索算法SSA优化LSTM的隐含层神经元个数,最佳学习率,最佳迭代次数,建立多特征输
    基于麻雀搜索算法SSA优化LSTM的隐含层神经元个数,最佳学习率,最佳迭代次数,建立多特征输入,单因变量输出的拟合预测建模。程序内注释详细,直接替换数据就可以用,可学习性强。直接运行可以出拟合预测图,优化迭代图,多种评价指标,便于分析学习。程序语言为matlab,要求最低版本为2020b。不会替......
  • 利用麻雀搜索算法SSA优化SVM的c和g,建立多列数据输入,单列数据输出的拟合预测建模,程序内
    利用麻雀搜索算法SSA优化SVM的c和g,建立多列数据输入,单列数据输出的拟合预测建模,程序内注释详细,直接替换数据就可以用,可以打印出多个常用的模型评价指标,不会替换数据的可以免费指导替换数据ID:6235676695227372......