グローバー探索 — √N 回で見つける振幅増幅
N 個の候補から条件を満たす 1 個を、約 √N 回の試行で見つけ出す。グローバーのアルゴリズムの心臓部は振幅増幅 — 「符号の反転」と「平均まわりの反転」を交互に繰り返すだけの、驚くほど単純な反復です。正解の振幅がぐんぐん育つ様子を、実際の振幅シミュレーションで1ステップずつ動かします。
1. 問題設定 — オラクルという「答え合わせ回路」
候補は x = 0 〜 N−1 の N 個。そのうちただ1つの正解 ω だけが条件 f(ω)=1 を満たします。手がかりは一切なし — できるのは「x は正解?」と判定関数 f に聞くことだけ。古典計算機なら平均 N/2 回、最悪 N 回聞くしかありません。
量子版の f がオラクルです。オラクルは重ね合わせ状態を受け取り、正解の成分の符号だけを反転します(位相オラクル):|ω⟩ → −|ω⟩。ここで大事なのは、符号を反転しただけでは測定確率は 1 ミリも変わらないこと(|−a|² = |a|²)。印は付いたのに見えない — この見えない印を「振幅の差」に変換するのが、次の拡散操作です。
2. 振幅増幅を動かす — オラクルと拡散の反復
N = 16 の実振幅シミュレーションです。初期状態は H ゲートによる一様重ね合わせ(全部 1/√16 = 0.25)。① オラクル(正解の符号反転)→ ② 拡散(平均まわりの反転)を交互に押して、正解の振幅が育つのを確かめてください。そして最適回数(約3回)を過ぎても続けると何が起きるかも。
3. 拡散のからくり — 平均まわりの反転
拡散演算子は D = 2|s⟩⟨s| − I。数式は物々しいですが、やることは「各振幅 a を平均 m の反対側へ折り返す(a → 2m − a)」だけです。オラクルで1本だけ負にしておくと平均 m がわずかに下がり、その m を鏡にして全員を折り返すと — 負だった正解だけが大きく跳ね上がります。スローモーションでどうぞ。
4. 幾何で見る — 2枚の鏡は回転になる
実は状態ベクトルはずっと、|ω⟩(正解)と |α⟩(正解以外の一様和)が張る2次元平面の中にいます。この平面で見ると:
- オラクル = |α⟩ 軸(横軸)に関する鏡映(|ω⟩ 成分の符号反転)
- 拡散 = 初期状態 |s⟩ の方向に関する鏡映
そして幾何学の定理どおり、鏡映2回は回転1回。2枚の鏡のなす角が θ なら、1反復ごとに状態は正解軸へ角度 2θ ずつ回転します(sin θ = 1/√N)。
5. 古典との勝負 — 「2乗の加速」の意味
古典の総当たりは平均 N/2 回、グローバーは約 (π/4)√N 回。N を大きくしながら差を見てみましょう。N=100万なら 50万回 vs 約785回 — 桁が2つ半違います。ただし √N は「指数的加速」ではありません。N が 100 倍になれば、グローバーの手間も 10 倍に増えます。
6. まとめ
- オラクル:正解の振幅の符号だけを反転する「答え合わせ回路」。反転だけでは確率は変わらない。
- 拡散:全振幅を平均まわりで折り返す。オラクルの付けた「見えない印」を振幅の差に変換する。
- 幾何:2つの鏡映=1反復あたり 2θ の回転。P(k) = sin²((2k+1)θ) で、約 (π/4)√N 回がピーク。
- 加速は2乗ぶん:N/2 → √N。しかも √N は証明済みの下界(BBBV定理)で、これ以上速い量子探索は存在しない。