总的来说,对于《量子程序设计基础》一书中的版本和一些现成的写法,当n=3且shots=1024时,即通过类似如下语句实现平衡函数: for qubit in range(n): qc.cx(qubit,n)其结果总是在输入平衡函数时得到类似{'111':1024}的结果,该书也认为此结果正确。但通过理论计算,几乎没有任何迹象表明末态出现|111>的概率振幅总为1,像是并非真的随机。反之如果通过类似如下语句实现平衡函数: mcx = MCXGate(n, ctrl_state='1'*n) oracle.append(mcx, list(range(n)) + [n]) 则确实能够获得四个态每个大概256次左右的样子,比如{'001':255,'101':258,'110':252,'111':259}。 我观察上述两种情况下的量子线路图也并无什么区别。所以很奇怪,为啥前者包括教科书也给出一个很明确的'111',而标准算法本身只是从顶部量子比特的状态来判断,平衡函数任选的四个状态概率不应该是各256次左右吗? |