为什么量子估计器说我没有在 Q# 中使用任何量子位?

简而言之,我正在尝试在 Q# 中实现非均匀离散傅里叶变换。

我已经设法以经典的方式做到了无错误(没有使用量子门或量子位),但资源估算器说没有使用量子资源。这让我倾向于相信后端的 Q#,即使我有一个 Operation 类型的函数,也没有使用任何量子特定的操作。所以我现在正在尝试一步一步地把我的数据加载到量子比特中(我在想)然后利用任何潜在有用的门。

问题是我的数据由 2 个数组组成,这些数组由表示复数的实部和虚部的 Double 数组成。将来我可能需要将其重新设计为一系列直接复杂的值。

但本质上,问题是如何将一个复数加载到一个或多个量子位中,以便我可以对其进行一些处理并获得一些结果?

我不太热衷于分享我的代码,因为算法是以前没有尝试过的东西;但我愿意提供一小部分代码,尤其是进一步的说明。


MM们
浏览 68回答 1
1回答

汪汪一只猫

如果我正确理解你的描述,量子开发工具包提供的资源估计器准确地报告你的操作没有使用任何量子位或量子指令。这是因为 Q# 操作使用的 qubits 恰好是usingorborrowing语句显式使用的 qubits,加上调用的任何其他操作使用的 qubits。例如,如果你在 Q# 中编写传送操作,你可能会喜欢以下内容:operation PrepareEntangledPair(left : Qubit, right : Qubit) : Unit {    body (...) {        H(left);        CNOT(left, right);    }    adjoint auto;}operation ApplyCorrection(here : Qubit, msg : Qubit, there : Qubit) : Unit {    if (M(msg) == One)  { Z(there); }    if (M(here) == One) { X(there); }}operation TeleportMessage(msg : Qubit, there : Qubit) : Unit {    using (here = Qubit()) {        // Create some entanglement that we can use to send our message.        PrepareEntangledPair(here, there);        // Move our message into the entangled pair by using a Bell        // measurement.        Adjoint PrepareEntangledPair(msg, here);        // Measure out the entanglement.        ApplyCorrection(here, msg, there);        // Reset our "here" qubit before releasing it.        Reset(here);    }}operation TeleportClassicalFlag() : Unit {    using ((msg, there) = (Qubit(), Qubit())) {        X(msg);        TeleportMessage(msg, there);        ApplyToEach(Reset, [msg, there]);    }}在此报告上运行资源估算器,使用了三个量子位(两个TeleportClassicalFlag直接使用,一个使用TeleportMessage,被调用TeleportClassicalFlag):相比之下,经典逻辑始终保持经典。这旨在使混合经典逻辑和量子逻辑变得容易,例如在实现迭代相位估计算法时。在上面的示例中,使用的if语句和==运算符用于ApplyCorrection描述隐形传态算法的经典部分。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript