0

简而言之,我正在尝试在 Q# 中实现 NonUniform Discrete Fourier Transform。

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

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

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

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

4

1 回答 1

2

如果我正确理解您的描述,量子开发套件随附的资源估算器会准确报告您的操作未使用任何量子比特或量子指令。这是因为 Q# 操作使用的量子位正是那些与usingorborrowing语句一起显式使用的量子位,以及任何其他调用的操作使用的量子位。

例如,如果您在 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描述隐形传输算法的经典部分。

于 2019-04-19T15:53:34.420 回答