A5: Generate State 12(02n1)\frac{1}{\sqrt{2}}\lparen\ket{0}-\ket{2^{n}-1}\rparen III

実行時間制限:3 秒

メモリ制限:512 MiB

配点:200点

Writer:ST12

解説

問題 A4 の想定解法では量子ビット数 nn に対して量子回路の深さが n/2+3\lfloor n/2 \rfloor + 3 となり、この問題を解くことができません。 さらに量子回路の深さを小さくするには、どのような量子回路を設計すれば良いのでしょうか?

問題 A4 にて学んだ「なるべく連続して同じ量子ビットに対して量子ゲートを作用させるのを避けること」をさらに適用する必要があります。

以下の 88 量子ビットの例を確認してみましょう。

このとき、量子回路上の境界線1によって分けられた各ブロックの操作はすべて異なる量子ビットに対して作用するため、同時に行うことができ、各ブロックの深さは 11 になります。 すなわち、上記の量子回路の深さは 55 となります。

以上の操作を一般化すると、量子回路の深さは log2n+2\lceil \log_{2}{n} \rceil + 2 となり、この問題を解くことができます。

解答例

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

from qiskit import QuantumCircuit
import math
 
 
def solve(n: int) -> QuantumCircuit:
    qc = QuantumCircuit(n)
    
    qc.h(0)
 
    for i in range(math.ceil(math.log2(n))):
        for j in range(2**i):
            if 2**i + j == n:
                break
            qc.cx(j, 2**i + j)
 
    qc.z(0)
 
    return qc

Footnotes

  1. Qiskit では境界線 (qc.barrier()) が深さにカウントされてしまうため、提出するコードには含めないように注意して下さい。