Freigeben über


Vorgang erneut bezeichnen

Vollqualifizierter Name: Std.Canon.Relabel

operation Relabel(current : Qubit[], updated : Qubit[]) : Unit is Adj

Zusammenfassung

Beschriftet die Qubits im current Array mit den Qubits im updated Array neu. Das updated Array muss eine gültige Permutation des current Arrays sein.

Eingabe

Strömung

Array von Qubits, die neu bezeichnet werden sollen.

aktualisierte

Array von Qubits, mit denen das current Array neu bezeichnet werden soll.

Bemerkungen

Dieser Vorgang ist nützlich, wenn Sie Qubits auf eine Weise neu bezeichnen müssen, die keine Quantenvorgänge verursacht. Beachten Sie, dass bei der Kompilierung für die Ausführung auf Hardware mit eingeschränkter Qubit-Konnektivität dieser Vorgang möglicherweise keine Änderungen an der Qubit-Adjacency und ein oder mehrere SWAP Gates möglicherweise noch erforderlich sind.

Beispiel

Im folgenden Beispiel wird veranschaulicht, wie Qubits in einem Register neu bezeichnet werden:

use qubits = Qubit[3];
let newOrder = [qubits[2], qubits[0], qubits[1]];
Relabel(qubits, newOrder);

Nach diesem Vorgang bezieht sich jede Verwendung von qubits[0] auf das Qubit, das ursprünglich qubits[2]usw. war. Um die Bezeichnungen auf zwei Qubits auszutauschen, können Sie das virtuelle Äquivalent eines SWAP Gates verwenden:

use (q0, q1) = (Qubit(), Qubit());
Relabel([q0, q1], [q1, q0]);

Beachten Sie, dass der angrenzende Teil dieses Vorgangs die Reihenfolge der Argumente effektiv ändert, sodass Adjoint Relabel(qubits, newOrder)Relabel(newOrder, qubits)entspricht.