[0063] 在遍历量子线路的节点过程中,记录当前遍历到的节点操作的量子比特序号和唯一标识符,以更新遍历过程中每个比特对应的最后一个节点。并且,创建第一容器,用于记录每个比特对应的最后一个节点及当前遍历到的节点的信息;创建第二容器,用于记录最后一个节点与当前遍历到的节点之间的相邻关系。其中,量子比特对应的最后一个节点是指当前遍历到的量子逻辑门节点的前驱节点。
[0064] 首先,按照节点操作的量子比特依序遍历量子程序的节点。从量子线路的第一层开始,遍历到H(q[0]),则记录当前遍历的H门操作的量子比特序号0及其唯一标识符“1”,即:(0,1)。初始第一容器中没有元素,即H门没有前驱节点,即当前量子比特对应的最后一个节点为空。在第一容器记录0号比特对应的最后一个节点及当前遍历到节点的唯一标识符信息,为空和1,则记为[1]。由于最后一个节点为空,与下一个节点也就是当前遍历到的节点不存在相邻关系,则第二容器不进行记录。然后,依序遍历到第一层内的H(q[1])、H(q[2])、H(q[3]),处理流程同理。
[0065] 当遍历至量子线路第二层的起始,即遍历至节点RX(q[0])时,RX门操作的量子比特序号为0,唯一标识符为5,则记录(0,5),此时RX(q[0])的前驱节点为H(q[0]),则更新0号量子比特对应的最后一个节点,即由空更新为H(q[0]),其唯一标识符为“1”。在第一容器记录当前0号比特对应的最后一个节点H(q[0])及当前遍历到的节点RX(q[0])的唯一标识符信息,记为[1,5]。同时,在第二容器记录当前0号比特对应的最后一个节点H(q[0])与当前遍历到的节点RX(q[0])之间的相邻关系,以唯一标识符的形式记录,即记为{1,5},表示节点1和节点5相邻。
[0066] 遍历到节点CNOT(q[1],q[2])时,CNOT门操作的量子比特序号为1和2,唯一标识符为6,则记录(1,6)和(2,6),该节点6的前驱节点为H(q[1])和H(q[2]),则更新1号比特的最后一个节点为H(q[1])、更新2号比特的最后一个节点为H(q[2])其余节点的处理流程同理,在此不做赘述。
[0067] 具体的,按照上述方法,继续依序遍历如图2所示的量子程序的节点,记录量子线路第一层0、1、2、3号比特当前遍历节点的量子逻辑门节点的唯一标识符,并同时在第一容器和第二容器内记录节点唯一标识符,得到如表1所示的量子线路第一层的遍历结果,其中,每一层内的节点分别操作的量子比特互不相同:
[0068] 表1:图2所示量子线路第一层的遍历结果表
[0069]
[0070] 具体的,按照上述方法,继续依序遍历如图2所示的量子程序的节点,记录量子线路第二层0、1、2、3号比特当前遍历节点的量子逻辑门节点的唯一标识符,并同时在第一容器和第二容器内记录节点唯一标识符,得到如表2所示的量子线路第二层的遍历结果:
[0071] 表2:图2所示量子线路第二层的遍历结果表
[0072]
[0073] 具体的,按照上述方法,继续依序遍历如图2所示的量子程序的节点,记录量子线路第三层0、1、2、3号比特当前遍历节点的量子逻辑门节点的唯一标识符,并同时在第一容器和第二容器内记录节点唯一标识符,得到如表3所示的量子线路第三层的遍历结果:
[0074] 表3:图2所示量子线路第三层的遍历结果表
[0075]
[0076] 具体的,按照上述方法,继续依序遍历如图2所示的量子程序的节点,记录量子线路第四层0、1、2、3号比特当前遍历节点的量子逻辑门节点的唯一标识符,并同时在第一容器和第二容器内记录节点唯一标识符,得到如表4所示的量子线路第四层的遍历结果:
[0077] 表4:图2所示量子线路第四层的遍历结果表
[0078]
[0079] S103:根据所述节点及节点之间的关联关系,生成与所述量子程序对应的有向无环图;其中,所述有向无环图中的顶点表征节点,所述有向无环图中的边表征节点之间的关联关系;其中,所述边的方向表征该边相连的顶点对应的节点被执行的时序关系。
[0080] S1031:构建与所述量子操作节点对应的顶点;
[0081] 具体的,第一容器中用于记录每个比特对应的最后一个节点及当前遍历到的节点的信息的集合,用于构建对应的量子逻辑门节点对应的顶点。例如:
[0082] 第一容器中的集合[1],即构建对应的顶点1(H(q[0]));
[0083] 第一容器中的集合[2],即构建对应的顶点2(H(q[1]));
[0084] 第一容器中的集合[3],即构建对应的顶点3(H(q[2]));
[0085] 第一容器中的集合[4],即构建对应的顶点4(H(q[3]));
[0086] 第一容器中的集合[1,5],即构建对应的顶点1(H(q[0]))和顶点5(RX(q[0]));
[0087] 第一容器中的集合[2,6],即构建对应的顶点2(H(q[1]))和顶点6(CNOT(q[1],q[2]));
[0088] 第一容器中的集合[3,6],即构建对应的顶点3(H(q[2]))和顶点6(CNOT(q[1],q[2]));
[0089] 第一容器中的集合[4,7],即构建对应的顶点4(H(q[3]))和顶点7(RX(q[3]));
[0090] 第一容器中的集合[6,8],即构建对应的顶点6(CNOT(q[1],q[2]))和顶点8(RX(q[1]));
[0091] 第一容器中的集合[6,9],即构建对应的顶点6(CNOT(q[1],q[2]))和顶点9(H(q[2]));
[0092] 第一容器中的集合[7,10],即构建对应的顶点7(RX(q[3]))和顶点10(CNOT(q[2],q[3]));
[0093] 第一容器中的集合[9,10],即构建对应的顶点9(H(q[2]))和顶点10(CNOT(q[2],q[3]));
[0094] 得到如图3所示的量子线路对应的带顶点信息的示意图。
[0095] S1032:构建具有所述相邻关系的节点对应的顶点之间的边,其中,所述边的方向由具有所述相邻关系的节点中的前一节点对应的顶点指向下一节点对应的顶点。
[0096] 具体的,第二容器中用于记录最后一个节点与当前遍历到的节点之间的相邻关系,用于构建具有所述相邻关系的节点对应的顶点之间的边,其中,所述边的方向由具有所述相邻关系的节点中的前一节点对应的顶点指向下一节点对应的顶点。例如:
[0097] 第二容器中的集合{1,5}表示顶点1(H(q[0]))和顶点5(RX(q[0]))之间有边相连,且边的方向由顶点1(H(q[0]))指向顶点5(RX(q[0]));
[0098] 第二容器中的集合{2,6}表示顶点2(H(q[1]))和顶点6(CNOT(q[1],q[2]))之间有边相连,且边的方向由顶点2(H(q[1]))指向顶点6(CNOT(q[1],q[2]));
[0099] 第二容器中的集合{3,6}表示顶点3(H(q[2]))和顶点6(CNOT(q[1],q[2]))之间有边相连,且边的方向由顶点3(H(q[2]))指向顶点6(CNOT(q[1],q[2]));
[0100] 第二容器中的集合{4,7}表示顶点4(H(q[3]))和顶点7(RX(q[3]))之间有边相连,且边的方向由顶点4(H(q[3]))指向顶点7(RX(q[3]));
[0101] 第二容器中的集合{6,8}表示顶点6(CNOT(q[1],q[2]))和顶点8(RX(q[1]))之间有边相连,且边的方向由顶点6(CNOT(q[1],q[2]))指向顶点8(RX(q[1]));
[0102] 第二容器中的集合{6,9}表示顶点6(CNOT(q[1],q[2]))和顶点9(H(q[2]))之间有边相连,且边的方向由顶点6(CNOT(q[1],q[2]))指向顶点9(H(q[2]));
[0103] 第二容器中的集合{7,10}表示顶点7(RX(q[3]))和顶点10(CNOT(q[2],q[3]))之间有边相连,且边的方向由顶点7(RX(q[3]))指向顶点10(CNOT(q[2],q[3]));
[0104] 第二容器中的集合{9,10}表示顶点9(H(q[2]))和顶点10(CNOT(q[2],q[3]))之间有边相连,且边的方向由顶点9(H(q[2]))指向顶点10(CNOT(q[2],q[3]));
[0105] 综合各个顶点的指向关系,得到如图4所示的量子线路对应的有向无环图的示意图。
[0106] 示例性的,参见图5,图5为本发明实施例提供的另一种量子线路的示意图;可以理解的是,一个量子程序整体上对应有一条总的量子线路,本发明实施例所述量子程序即指该条总的量子线路。
[0107] 具体的,遍历量子程序的节点,首先获取量子线路量子比特数和各量子逻辑门的唯一标识符,例如,0号比特操作的第一个量子逻辑门H门节点的唯一标识符为“0”;最后一个量子比特4号比特操作的第一个量子逻辑门H门节点的唯一标识符为“3”,其中,量子逻辑门的唯一标识符按照量子逻辑门的执行时序进行标记。则遍历量子程序的节点分别为:节点0H(q[0])、节点1H(q[1])、节点2CNOT(q[3],q[2])、节点3H(q[4])、节点4RX(q[0])、节点5H(q[2])、节点6CNOT(q[3],q[4])、节点7CNOT(q[0],q[1])、节点8CNOT(q[3],q[2])、节点
9RX(q[4])、节点10H(q[1])、节点11H(q[2])、节点12CNOT(q[4],q[3])。
[0108] 在遍历量子线路的节点过程中,记录当前遍历到的节点操作的量子比特序号和唯一标识符,以更新遍历过程中每个比特对应的最后一个节点。并且,创建第一容器,用于记录每个比特对应的最后一个节点及当前遍历到的节点的信息;创建第二容器,用于记录最后一个节点与当前遍历到的节点之间的相邻关系。其中,量子比特对应的最后一个节点是指当前遍历到的量子逻辑门节点的前驱节点。
[0109] 首先,按照节点操作的量子比特依序遍历量子程序的节点。从量子线路的第一层开始,遍历到H(q[0]),则记录当前遍历的H门操作的量子比特序号0及其唯一标识符“0”,即:(0,0)。初始第一容器中没有元素,即H门没有前驱节点,即当前量子比特对应的最后一个节点为空。在第一容器记录0号比特对应的最后一个节点及当前遍历到节点的唯一标识符信息,为空和0,则记为[0]。由于最后一个节点为空,与下一个节点也就是当前遍历到的节点不存在相邻关系,则第二容器不进行记录。然后,依序遍历到第一层内的H(q[1])、CNOT(q[3],q[2])、H(q[4]),处理流程同理。
[0110] 当遍历至量子线路第二层的起始,即遍历至节点RX(q[0])时,RX门操作的量子比特序号为0,唯一标识符为4,则记录(0,4),此时RX(q[0])的前驱节点为H(q[0]),则更新0号量子比特对应的最后一个节点,即由空更新为H(q[0]),其唯一标识符为“0”。在第一容器记录当前0号比特对应的最后一个节点H(q[0])及当前遍历到的节点RX(q[0])的唯一标识符信息,记为[0,4]。同时,在第二容器记录当前0号比特对应的最后一个节点H(q[0])与当前遍历到的节点RX(q[0])之间的相邻关系,以唯一标识符的形式记录,即记为{0,4},表示节点0和节点4相邻。
[0111] 遍历到节点CNOT(q[3],q[4])时,CNOT门操作的量子比特序号为3和4,唯一标识符为6,则记录(3,6)和(4,6),该节点6的前驱节点为CNOT(q[3],q[2])和H(q[4]),则更新3号比特的最后一个节点为CNOT(q[3],q[2])、更新4号比特的最后一个节点为H(q[4]),其余节点的处理流程同理,在此不做赘述。
[0112] 具体的,按照上述方法,继续依序遍历如图5所示的量子程序的节点,记录量子线路第一层0、1、2、3、4号比特当前遍历节点的量子逻辑门节点的唯一标识符,并同时在第一容器和第二容器内记录节点唯一标识符,得到如表5所示的量子线路第一层的遍历结果,其中,每一层内的节点分别操作的量子比特互不相同:
[0113] 表5:图5所示量子线路第一层的遍历结果表
[0114]
[0115] 具体的,按照上述方法,继续依序遍历如图5所示的量子程序的节点,记录量子线路第二层0、1、2、3、4号比特当前遍历节点的量子逻辑门节点的唯一标识符,并同时在第一容器和第二容器内记录节点唯一标识符,得到如表6所示的量子线路第二层的遍历结果,其中,每一层内的节点分别操作的量子比特互不相同:
[0116] 表6:图5所示量子线路第二层的遍历结果表
[0117]
[0118] 具体的,按照上述方法,继续依序遍历如图5所示的量子程序的节点,记录量子线路第三层0、1、2、3、4号比特当前遍历节点的量子逻辑门节点的唯一标识符,并同时在第一容器和第二容器内记录节点唯一标识符,得到如表7所示的量子线路第三层的遍历结果,其中,每一层内的节点分别操作的量子比特互不相同:
[0119] 表7:图5所示量子线路第三层的遍历结果表
[0120]
[0121] 具体的,按照上述方法,继续依序遍历如图5所示的量子程序的节点,记录量子线路第四层0、1、2、3、4号比特当前遍历节点的量子逻辑门节点的唯一标识符,并同时在第一容器和第二容器内记录节点唯一标识符,得到如表8所示的量子线路第四层的遍历结果,其中,每一层内的节点分别操作的量子比特互不相同:
[0122] 表8:图5所示量子线路第四层的遍历结果表
[0123]
[0124] S103:根据所述节点及节点之间的关联关系,生成与所述量子程序对应的有向无环图;其中,所述有向无环图中的顶点表征节点,所述有向无环图中的边表征节点之间的关联关系;其中,所述边的方向表征该边相连的顶点对应的节点被执行的时序关系。
[0125] 具体的,
[0126] S1031:构建与所述量子操作节点对应的顶点;
[0127] 具体的,第一容器中用于记录每个比特对应的最后一个节点及当前遍历到的节点的信息的集合,用于构建对应的量子逻辑门节点对应的顶点。例如:
[0128] 第一容器中的集合[0],即构建对应的顶点0(H(q[0]));
[0129] 第一容器中的集合[1],即构建对应的顶点1(H(q[1]));
[0130] 第一容器中的集合[2],即构建对应的顶点2(CNOT(q[3],q[2]));
[0131] 第一容器中的集合[3],即构建对应的顶点3(H(q[4]));
[0132] 第一容器中的集合[0,4],即构建对应的顶点0(H(q[0]))和顶点4(RX(q[0]));
[0133] 第一容器中的集合[2,5],即构建对应的顶点2(CNOT(q[3],q[2]))和顶点5(H(q[2]));
[0134] 第一容器中的集合[2,6],即构建对应的顶点2(CNOT(q[3],q[2]))和顶点6(CNOT(q[3],q[4]));
[0135] 第一容器中的集合[3,6],即构建对应的顶点3(H(q[4]))和顶点6(CNOT(q[3],q[4]));
[0136] 第一容器中的集合[4,7],即构建对应的顶点4(RX(q[0]))和顶点7(CNOT(q[0],q[1]));
[0137] 第一容器中的集合[1,7],即构建对应的顶点1(H(q[1]))和顶点7(CNOT(q[0],q[1]));
[0138] 第一容器中的集合[5,8],即构建对应的顶点5(H(q[2]))和顶点8(CNOT(q[3],q[2]));
[0139] 第一容器中的集合[6,8],即构建对应的顶点6(CNOT(q[3],q[4]))和顶点8(CNOT(q[3],q[2]));
[0140] 第一容器中的集合[6,9],即构建对应的顶点6(CNOT(q[3],q[4]))和顶点9(RX(q[4]));
[0141] 第一容器中的集合[7,10],即构建对应的顶点7(CNOT(q[0],q[1]))和顶点10(H(q[1]));
[0142] 第一容器中的集合[8,11],即构建对应的顶点8(CNOT(q[3],q[2]))和顶点11(H(q[2]));
[0143] 第一容器中的集合[8,12],即构建对应的顶点8(CNOT(q[3],q[2]))和顶点12(CNOT(q[4],q[3]));
[0144] 第一容器中的集合[9,12],即构建对应的顶点9(RX(q[4]))和顶点12(CNOT(q[4],q[3]));
[0145] 得到如图6所示的量子线路对应的带顶点信息的示意图。
[0146] S1032:构建具有所述相邻关系的节点对应的顶点之间的边,其中,所述边的方向由具有所述相邻关系的节点中的前一节点对应的顶点指向下一节点对应的顶点。
[0147] 具体的,第二容器中用于记录最后一个节点与当前遍历到的节点之间的相邻关系,用于构建具有所述相邻关系的节点对应的顶点之间的边,其中,所述边的方向由具有所述相邻关系的节点中的前一节点对应的顶点指向下一节点对应的顶点。例如:
[0148] 第二容器中的集合{0,4}表示顶点0(H(q[0]))和顶点4(RX(q[0]))之间有边相连,且边的方向由顶点0(H(q[0]))指向顶点4(RX(q[0]));
[0149] 第二容器中的集合{2,5}表示顶点2(CNOT(q[3],q[2]))和顶点5(H(q[2]))之间有边相连,且边的方向由顶点2(CNOT(q[3],q[2]))指向顶点5(H(q[2]));
[0150] 第二容器中的集合{2,6}表示顶点2(CNOT(q[3],q[2]))和顶点6(RX(q[3]))之间有边相连,且边的方向由顶点2(CNOT(q[3],q[2]))指向顶点6(RX(q[3]));
[0151] 第二容器中的集合{3,6}表示顶点3(H(q[4]))和顶点6(RX(q[3]))之间有边相连,且边的方向由顶点3(H(q[3]))指向顶点6(CNOT(q[3],q[4]));
[0152] 第二容器中的集合{4,7}表示顶点4(RX(q[0]))和顶点7(CNOT(q[0],q[1]))之间有边相连,且边的方向由顶点4(RX(q[0]))指向顶点7(CNOT(q[0],q[1]));
[0153] 第二容器中的集合{1,7}表示顶点1(H(q[1]))和顶点7(CNOT(q[0],q[1]))之间有边相连,且边的方向由顶点1(H(q[1]))指向顶点7(CNOT(q[0],q[1]));
[0154] 第二容器中的集合{5,8}表示顶点5(H(q[2]))和顶点8(CNOT(q[3],q[2]))之间有边相连,且边的方向由顶点5(H(q[2]))指向顶点8(CNOT(q[3],q[2]));
[0155] 第二容器中的集合{6,8}表示顶点6(CNOT(q[3],q[4]))和顶点8(CNOT(q[3],q[2]))之间有边相连,且边的方向由顶点6(CNOT(q[3],q[4]))指向顶点8(CNOT(q[3],q[2]));
[0156] 第二容器中的集合{6,9}表示顶点6(CNOT(q[3],q[4]))和顶点9(RX(q[4]))之间有边相连,且边的方向由顶点6(CNOT(q[3],q[4]))指向顶点9(RX(q[4]));
[0157] 第二容器中的集合{7,10}表示顶点7(CNOT(q[0],q[1]))和顶点10(H(q[1]))之间有边相连,且边的方向由顶点7(CNOT(q[0],q[1]))指向顶点10(H(q[1]));
[0158] 第二容器中的集合{8,11}表示顶点8(CNOT(q[3],q[2]))和顶点11(H(q[2]))之间有边相连,且边的方向由顶点8(CNOT(q[3],q[2]))指向顶点11(H(q[2]));
[0159] 第二容器中的集合{8,12}表示顶点8(CNOT(q[3],q[2]))和顶点12(RX(q[3]))之间有边相连,且边的方向由顶点8(CNOT(q[3],q[2]))指向顶点12(CNOT(q[4],q[3]));
[0160] 第二容器中的集合{9,12}表示顶点9(RX(q[4]))和顶点12(CNOT(q[4],q[3]))之间有边相连,且边的方向由顶点9(RX(q[4]))指向顶点12(CNOT(q[4],q[3]));
[0161] 综合各个顶点的指向关系,得到如图7所示的量子线路对应的有向无环图的示意图。
[0162] 参见图8,图8是本发明实施例提供的一种量子程序转有向无环图方法装置的结构示意图,与图1所示的流程相对应,可以包括:
[0163] 获取模块801,用于获取量子程序的节点;
[0164] 确定模块802,用于根据所述节点操作的量子比特,确定所述节点之间的关联关系;
[0165] 生成模块803,用于根据所述节点及节点之间的关联关系,生成与所述量子程序对应的有向无环图;其中,所述有向无环图中的顶点表征节点,所述有向无环图中的边表征节点之间的关联关系;其中,所述边的方向表征该边相连的顶点对应的节点被执行的时序关系。
[0166] 具体的,获取模块,包括:
[0167] 遍历单元,用于遍历量子程序的节点,得到所述量子程序中各量子操作节点的节点信息。
[0168] 具体的,确定模块,包括:
[0169] 确定单元,用于针对每一所述量子操作节点,从该节点操作的量子比特依序执行的所有量子操作节点中,确定该节点的下一节点,得到该节点与下一节点之间的相邻关系。
[0170] 生成模块,包括:
[0171] 第一构建单元,用于构建与所述量子操作节点对应的顶点;
[0172] 第二构建单元,用于构建具有所述相邻关系的节点对应的顶点之间的边,其中,所述边的方向由具有所述相邻关系的节点中的前一节点对应的顶点指向下一节点对应的顶点。
[0173] 因此,本
申请实现一种通过将量子程序转化为对应的有向无环图的方法,并基于此方法,从而在量子程序中可以查询出指定结构的量子线路。
[0174] 本发明实施例还提供一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
[0175] 具体的,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
[0176] S101:获取量子程序中的节点;
[0177] S102:根据所述节点操作的量子比特,确定所述节点之间的关联关系;
[0178] S103:根据所述节点及节点之间的关联关系,生成与所述量子程序对应的有向无环图;其中,所述有向无环图中的顶点表征节点,所述有向无环图中的边表征节点之间的关联关系;其中,所述边的方向表征该边相连的顶点对应的节点被执行的时序关系。
[0179] 具体的,在本实施例中,上述存储介质可以包括但不限于:U盘、
只读存储器(Read-Only Memory,简称为ROM)、
随机存取存储器(Random Access Memory,简称为RAM)、移动
硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
[0180] 因此,本申请实现一种通过将量子程序转化为对应的有向无环图的方法,并基于此方法,从而在量子程序中可以查询出指定结构的量子线路。
[0181] 本发明实施例还提供一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
[0182] 具体的,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
[0183] 具体的,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
[0184] S101:获取量子程序中的节点;
[0185] S102:根据所述节点操作的量子比特,确定所述节点之间的关联关系;
[0186] S103:根据所述节点及节点之间的关联关系,生成与所述量子程序对应的有向无环图;其中,所述有向无环图中的顶点表征节点,所述有向无环图中的边表征节点之间的关联关系;其中,所述边的方向表征该边相连的顶点对应的节点被执行的时序关系。
[0187] 因此,本申请实现一种通过将量子程序转化为对应的有向无环图的方法,并基于此方法,从而在量子程序中可以查询出指定结构的量子线路。
[0188] 以上依据图式所示的实施例详细说明了本发明的构造、特征及作用效果,以上所述仅为本发明的较佳实施例,但本发明不以图面所示限定实施范围,凡是依照本发明的构想所作的改变,或
修改为等同变化的等效实施例,仍未超出说明书与图示所涵盖的精神时,均应在本发明的保护范围内。