ApplyPermutationUsingDecomposition-Vorgang

Warnung

Diese Dokumentation bezieht sich auf das klassische QDK, das durch das moderne QDK ersetzt wurde.

Weitere Informationen finden https://aka.ms/qdk.api Sie in der API-Dokumentation für das moderne QDK.

Namespace: Microsoft.Quantum.Synthesis

Paket: Microsoft.Quantum.Standard

Permutiert die Amplituden in einem Quantenzustand bei einer Permutation mithilfe einer auf der Zerlegung basierenden Synthese.

operation ApplyPermutationUsingDecomposition (perm : Int[], qubits : Microsoft.Quantum.Arithmetic.LittleEndian) : Unit is Adj + Ctl

BESCHREIBUNG

Dieses Verfahren implementiert den analysebasierten Syntheseansatz. Die Eingabe ist eine Permutation $\pi$ über $2^n$-Elemente ${0, \dots, 2^n-1}$, die eine $n$-Variable umkehrbare boolesche Funktion darstellt. Der Algorithmus führt iterativ die folgenden Schritte für jeden Variablenindex $i$ aus:

  1. Berechnen Sie $((\pi_l, \pi_r), \pi')$ so, dass die Bilder von $\pi_l$ und $\pi_r$ keine Bits in ihren Elementen an anderen Indizes als $i$ ändern, und Bilder von $\pi'$ ändern bit $i$ in ihren Elementen nicht.
  2. Legen Sie $\pi \leftarrow \pi'$ fest, und leiten Sie Wahrheitstabellen von $\pi_l$ und $\pi_r$ basierend auf Elementen ab, die keine Fixpunkte sind.

Nach dem Anwenden dieser Schritte für alle Variablenindizes ist die verbleibende Permutation $\pi$ die Identität, und basierend auf den gesammelten Wahrheitstabellen und Indizes kann man wahrheitstabellengesteuerte X-Vorgangsvorgänge mithilfe des Vorgangs ApplyXControlledOnTruthTable anwenden.

Die variable Reihenfolge ist $0, \dots, n - 1$. Eine benutzerdefinierte Variablenreihenfolge kann im Vorgang ApplyPermutationUsingDecompositionWithVariableOrder angegeben werden.

Eingabe

perm : Int[]

Eine Permutation von $2^n$-Elementen ab 0.

Qubits : LittleEndian

Eine Liste von $n$-Qubits, auf die die Permutation angewendet wird.

Ausgabe: Einheit

Beispiel

So synthetisieren Sie einen SWAP Vorgang:

using (qubits = Qubit[2]) {
  ApplyPermutationUsingDecomposition([0, 2, 1, 3], LittleEndian(qubits));
}

Referenzen

Weitere Informationen