0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【量子計算入門】Groverのアルゴリズム【誤解しがちなところを丁寧にやる】

Last updated at Posted at 2025-07-18

記事の内容

この記事では、グローバーのアルゴリズムの計算過程を一歩ずつ紹介します。

  • 具体例をベースに数式変形をできるだけ丁寧に進めます!!
  • そして、勉強中に私が感じた、アルゴリズムの誤解しやすいところ、気になるところをできるだけ言語化します。
    • アルゴリズムが答えをあらかじめ知っているように見える?
    • オラクルでの正解だけ符号反転の計算量は?
    • オラクルでの正解状態だけ符号反転。このとき、回路は正解を見つけたと言えるのか?
    • 「量子情報」とは何か?
  • こうした問いの言語化こそ、入門者にとっての価値になることを期待しています。(もちろん、まだまだ私も勉強中です。厳密ではない、不正確な記述になってしまったところがありえます。承知の上でご利用ください。)

それでは、まずはアルゴリズムの紹介から始めます。

グローバーのアルゴリズム入門(3ビット完全解説付き)

1. グローバーのアルゴリズムとは?

グローバーのアルゴリズムは、量子コンピュータで特定の条件を満たす1つの解を、高速に見つけるアルゴリズムです。

問題設定(探索問題)

  • $N = 2^n$ 個の要素($n$ビット)からなる集合 $S$ がある
  • その中に、条件を満たす「正解」の要素 $x^\ast$ がある
  • ブラックボックス関数 $f: {0,1}^n \rightarrow {0,1}$ によって判定できる:
f(x) = 
\begin{cases}
1 & \text{if } x = x^\ast \\
0 & \text{otherwise}
\end{cases}

グローバーの目的は:$f(x)=1$ となる $x^\ast$ を効率よく見つけること


2. アルゴリズム全体の流れ

  1. 初期化:すべての状態を等確率で重ね合わせ
  2. オラクル:正解状態に $-1$ の位相を与える
  3. 反転操作(ディフューザー):振幅を平均から反転
  4. 繰り返し:上記の組み合わせを $O(\sqrt{N})$ 回
  5. 測定:正解が高確率で観測される

3. 数式で解説(n=3の場合)

ステップ1:初期状態の作成

まず、$|000\rangle$ に $H$(アダマール)ゲートを各ビットに適用:

|s\rangle = H^{\otimes 3} |000\rangle

アダマール変換 $H$ は以下の変換を行う(1量子ビット):

H|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle + |1\rangle), \quad H|1\rangle = \frac{1}{\sqrt{2}}(|0\rangle - |1\rangle)

したがって、

|s\rangle = \frac{1}{\sqrt{8}} \sum_{x \in \{0,1\}^3} |x\rangle

つまり、$|000\rangle$ 〜 $|111\rangle$ の全状態を均等に重ね合わせた状態です。


ステップ2:オラクルによる位相反転

オラクルは関数 $f(x)$ に基づいて次のように定義される:

U_f |x\rangle = (-1)^{f(x)} |x\rangle

つまり、$x = x^\ast$ のときだけ符号が反転します。

例:$x^\ast = 101$ の場合

U_f \left( \frac{1}{\sqrt{8}} \sum_x |x\rangle \right) = \frac{1}{\sqrt{8}} \left( \sum_{x \neq 101} |x\rangle - |101\rangle \right)

ステップ3:反転操作(ディフューザー)

この操作は、「平均からの差を反転させる」ことで、正解状態の振幅を増やします。

数学的定義:

U_s = 2|s\rangle\langle s| - I

これは「すべての状態からの平均」に対する反転を行うユニタリ演算です。

作用例:

U_s \left( \sum_x a_x |x\rangle \right) = \sum_x \left( 2\bar{a} - a_x \right) |x\rangle

ただし、$\bar{a} = \frac{1}{N} \sum_x a_x$ は平均振幅。


ステップ4:1回目の繰り返し後の状態(例:x*=101)

  1. 初期状態:
|\psi_0\rangle = \frac{1}{\sqrt{8}} \sum_x |x\rangle
  1. オラクル適用:
|\psi_1\rangle = \frac{1}{\sqrt{8}} \left( \sum_{x \neq 101} |x\rangle - |101\rangle \right)
  1. ディフューザー適用:
  • 振幅の平均 $\bar{a}$ を計算:
    • 正解以外の振幅:$\frac{1}{\sqrt{8}}$
    • 正解:$-\frac{1}{\sqrt{8}}$
    • 合計振幅:$7 \cdot \frac{1}{\sqrt{8}} - \frac{1}{\sqrt{8}} = \frac{6}{\sqrt{8}}$
    • 平均振幅:
\bar{a} = \frac{1}{8} \cdot \left( 6 \cdot \frac{1}{\sqrt{8}} \right) = \frac{3}{4\sqrt{8}}
  • 各振幅を $a_x \mapsto 2\bar{a} - a_x$ に変換

正解状態(x=101)の振幅:

a_{101}^{\text{new}} = 2\bar{a} - (-\frac{1}{\sqrt{8}}) = 2 \cdot \frac{3}{4\sqrt{8}} + \frac{1}{\sqrt{8}} = \frac{3}{2\sqrt{8}} + \frac{1}{\sqrt{8}} = \frac{5}{2\sqrt{8}}

非正解状態の振幅(他の7個):

a_{x\neq 101}^{\text{new}} = 2\bar{a} - \frac{1}{\sqrt{8}} = 2 \cdot \frac{3}{4\sqrt{8}} - \frac{1}{\sqrt{8}} = \frac{3}{2\sqrt{8}} - \frac{1}{\sqrt{8}} = \frac{1}{2\sqrt{8}}

→ 正解の振幅が増え、非正解の振幅が減った!


ステップ5:繰り返すことで正解の確率が増加

グローバーの繰り返し回数 $R$ はおおよそ:

R = \left\lfloor \frac{\pi}{4} \sqrt{2^n} \right\rfloor

3ビットの場合:

R = \left\lfloor \frac{\pi}{4} \cdot \sqrt{8} \right\rfloor = \left\lfloor \frac{\pi}{4} \cdot 2.828 \right\rfloor = 2

ステップ6:測定すれば高確率で x* が得られる!

振幅が最も高くなっている状態は $x^\ast$。
測定すれば、ほぼ確実にそのビット列が得られます。


4. まとめ

  • グローバーのアルゴリズムは、探索問題の解を $O(\sqrt{N})$ で見つける量子アルゴリズム
  • オラクルとディフューザーを組み合わせ、振幅を操作して正解状態を増幅
  • 3ビットの場合でも、計算の流れと意味がすべて数式で追える

補足 勉強していて気になったところ

「正解の中身」はわからないのに正解を発見できるということの核心

グローバーのアルゴリズムの核心は、

「正解を知る必要はなくても、“正解かどうか”だけを教えてくれる関数(=「オラクル」と呼ぶ)を使い、量子干渉によって正解状態の確率振幅を増幅できる」

→ これによって、正解の中身を知らずに「どれが正解か」を高確率(ほとんど1)で見つけられる。

アルゴリズムの概要

ステップ1:全状態の重ね合わせを準備
ステップ2:オラクル(Oracle)により正解状態だけが符号反転
ステップ3:ディフューザー(Diffuser)で干渉を起こす
ステップ4:上の2つを繰り返す(√N回)

いや、答えをあらかじめ知っているように見える?

オラクル関数を具体的に構成するとき、正解の具体的な値を使用しているように見えます。つまり、正解の値をあらかじめ知っているようです。

この考えのどこが間違っているのでしょうか。

シミュレーションでオラクル回路を手動で組むときには、勉強用目的で構成する。ゆえに、正解を知っている前提でアルゴリズムを作る。

しかし、理論上のグローバーのアルゴリズムでは、オラクルは与えられた「判定関数」であり、その中身を知らずに使う前提です。

本物の量子回路では、正解を指定するコードは使えるか?

使えない。正解はわからない前提。

ではどうする?

問題固有の判定関数 f(x) をユニタリな量子回路として構成する。

正解の情報は?

回路の中に、相対的な位相の違いとして表現されている。

オラクルでの正解状態だけ符号反転 このとき、回路は正解を見つけた、と言えるのか?

この処理は情報を読み出すものではなく、あくまで干渉を起こすための準備です。

ポイント:
この時点では、正解の確率はまだほとんど変わっていません。

位相が変わっただけで、測定確率に直結しません。
位相の違いは、単一の測定結果には現れない(不可視)

量子力学において、位相の違いは単体では観測できません。観測可能な量(測定確率)は振幅の絶対値の二乗です。

量子状態は、振幅と位相を持った複素ベクトルで表現されます。だから、位相の違いは、状態の違い(情報の違い)と言えます。よって、位相の違いが干渉(計算過程)に影響を与え、計算結果の差異をうみます。

量子情報とは?

観測される前の世界において、「どのように重ね合わされ、干渉しうるか」に関する構造的情報のこと。

その意味で、「観測者には見えないが回路が使える情報」がまさに相対位相であり、コヒーレンスなのです。

量子情報とは、量子状態の数学的構造(ヒルベルト空間内のベクトル)を介して、物理系が保持・伝達・変換しうる情報のことであり、観測・干渉・エンタングルメントなど量子特有の操作と不可分なもの。

「測定前の状態に内在する、干渉には効くが観測では直接見えない情報」の例

相対位相

干渉には現れるが観測には現れない。量子状態の構造的な違いを決定する

量子コヒーレンス

相対位相が保たれている状態。干渉が可能であることの指標。

オフダイアゴナル要素

密度行列で位相を表す。$ρ01$、$ρ10$などがゼロでない=位相がある

計算量について誤解しやすいところ オラクルでの正解だけ符号反転の計算量は?

オラクル関数 𝑓(𝑥)をユニタリ回路に実装したときのゲート数に依存する。
通常、ビット数$n$に依存。

$O(n)$ ~ $O(n^2)$となる。(※多制御ゲートの分解方法に依存)

ゆえに、グローバーのアルゴリズムの最適性$O(√N)$は、オラクルが1回でコスト定数(または低次)で呼べるという前提で議論されます。

関連記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?