A2: Qubit Swap

実行時間制限:3 秒

メモリ制限:512 MiB

配点:200点

Writer:fortoobye

解説

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

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

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

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

a000+a110+a201+a311CX(0,1)a000+a310+a201+a111CX(1,0)a000+a310+a101+a211CX(0,1)a000+a210+a101+a311\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 です。

参考

3ステップで 22 変数 x,yx, y をスワップする古典アルゴリズムとして、XOR swap が知られています。 このアルゴリズムでは、XOR演算を利用して以下の 33 つのステップでスワップが実現されます。

  1. yyx+y(mod2)x + y \pmod 2 で置き換える。
  2. xxx+y(mod2)x + y \pmod 2 で置き換える。
  3. yyx+y(mod2)x + y \pmod 2 で置き換える。

yyx+y(mod2)x + y \pmod 2 で置き換える操作は CX(0,1)CX(0, 1) と対応し、xxx+y(mod2)x + y \pmod 2 で置き換える操作は CX(1,0)CX(1, 0) と対応するので、このアルゴリズムを元に解くこともできます。

解答例

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

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

Footnotes

  1. 制御ゲートについては QPC 001 - A3 の解説 を参考にしてください。