B3: SWAP Qubits

実行時間制限:3 秒

メモリ制限:512 MiB

配点:200点

Writer:PSL

解説

量子ビットの状態をスワップする量子ゲートはスワップゲートと呼ばれます。

この問題では、ビットが変わるだけで複素振幅には変化がないため、XX ゲートや CXCX ゲートを利用できないかと考えることができます。

実際、スワップゲートは次のように 3 つの制御 XX ゲートを用いて実装できることが知られています。

状態遷移は次のように表されます。

a0∣00⟩+a1∣10⟩+a2∣01⟩+a3∣11⟩→CX(0,1)a0∣00⟩+a3∣10⟩+a2∣01⟩+a1∣11⟩→CX(1,0)a0∣00⟩+a3∣10⟩+a1∣01⟩+a2∣11⟩→CX(0,1)a0∣00⟩+a2‾∣10⟩+a1‾∣01⟩+a3∣11⟩\begin{align} a_0\ket{00} + a_1\ket{10} + a_2\ket{01} + a_3\ket{11} &\xrightarrow{CX(0, 1)} a_0\ket{00} + a_3\ket{10} + a_2\ket{01} + a_1\ket{11} \nonumber\\ &\xrightarrow{CX(1, 0)} a_0\ket{00} + a_3\ket{10} + a_1\ket{01} + a_2\ket{11} \nonumber\\ &\xrightarrow{CX(0, 1)} a_0\ket{00} + \underline{a_2}\ket{10} + \underline{a_1}\ket{01} + a_3\ket{11}\\ \end{align}

すなわち、CX(0,1)CX(0, 1) は ∣10⟩\ket{10} と ∣11⟩\ket{11} の複素振幅を、CX(1,0)CX(1, 0) は ∣01⟩\ket{01} と ∣11⟩\ket{11} の複素振幅を入れ替えることがわかります。

量子回路の深さは 33 です。

解答例

解答例は以下の通りです。

from qiskit import QuantumCircuit
 
 
def solve() -> QuantumCircuit:
    qc = QuantumCircuit(2)
 
    qc.cx(0, 1)
    qc.cx(1, 0)
    qc.cx(0, 1)
 
    return qc