TL

ドイチュ–ジョザのアルゴリズム

量子だと本当に速い最初の証拠。関数が定数か均衡かを、古典なら最悪で指数回かかる判定を、たった1回の問い合わせで確定できる仕組みを原理から解けます。

応用量子アルゴリズム量子計算位相キックバックアダマール変換オラクル最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.n ビット入力の関数 f が、全入力で同じ値を返す「定数」か、ちょうど半数が0・半数が1の「均衡」かを判定する問題。前提としてどちらかであることが保証されている。
  • 2.量子並列性ですべての入力を1回の重ね合わせに載せ、位相キックバックで f の値を出力ビットの符号ではなく入力側の位相へ移し、アダマール変換の干渉で答えを1回の測定に集約する。
  • 3.古典は決定的に確定させるには最悪で 2^(n-1)+1 回の問い合わせが要るのに対し、量子はオラクル呼び出し1回で確定。誤りゼロの分離を初めて示した歴史的アルゴリズム。

「量子は本当に速いのか」への最初の答え

ドイチュ–ジョザのアルゴリズムは、量子計算が古典計算を明確に上回れることを、誤りゼロで示した最初の例です。実務で解きたい問題そのものではありませんが、後の ショアやグローバー を含むほぼすべての量子アルゴリズムが使う3つの道具——量子並列性・位相キックバック・干渉——が最小構成で凝縮されています。ここではその仕掛けを、なぜ1回の問い合わせで答えが出るのかまで分解します。

扱う問題はこうです。n ビットのビット列を入力に取り、0か1を返す関数 f があります。この f は次のどちらかであることが保証されています。

  • 定数(constant): すべての入力に対して同じ値を返す(常に0、または常に1)。
  • 均衡(balanced): 入力 2^n 個のうち、ちょうど半数で0、残り半数で1を返す。

f の中身は見えず、値を知るには「入力を与えて出力を得る」問い合わせ(オラクル)だけが許されます。どちらのタイプかを当てよ、というのが問題です。

古典での下限を押さえる

古典で確実に答えを出すには、運が悪いと入力の過半数を調べる必要があります。半数ちょうどまで同じ値が続いても、まだ定数と均衡の両方があり得るからです。全 2^n 個の半分より1つ多い 2^(n-1)+1 回まで問い合わせて初めて確定します。乱択で誤り確率を許せば少数回で高確率の判定はできますが、誤りゼロを要求すると指数回が必要——ここが量子との差の土俵です。

道具1:量子並列性で全入力を一度に載せる

量子ビット n 個を、すべて |0> からアダマール変換 H にかけると、2^n 通りの入力すべての均等な重ね合わせが作れます。1量子ビットでは H|0> = (|0>+|1>)/√2 です。これを n 個並べると次のようになります。

H^⊗n |00…0> = (1/√(2^n)) Σ_x |x>    (x は 0 から 2^n−1 の全ビット列)

この1本の状態の中に、2^n 個の入力がすべて等しい振幅で含まれています。ここに f を1回作用させれば、原理的には全入力に対する f の評価が同時に進みます。これが量子並列性です。

ただし注意が必要です。重ね合わせに f を効かせても、そのまま測定すれば得られるのはランダムな1つの f(x) だけ。全部を一度に読み出すことはできません。並列に計算した結果を答えに変えるには、次の位相キックバックと干渉が要る——ここが「速そうに見えて実は難しい」核心です。

道具2:位相キックバックで f を位相に移す

量子オラクルは可逆でなければならないため、f は入力を壊さない形 U_f: |x>|y> → |x>|y ⊕ f(x)> で与えられます( は排他的論理和、y は補助の出力ビット)。素直に使うと f(x) は出力ビットに書き込まれますが、ここに巧妙な準備を施します。

出力ビットを |1> にしてから H をかけ、|−> = (|0>−|1>)/√2 にしておくのです。この状態に U_f を作用させると、次が成り立ちます。

U_f |x>|−> = |x> · (|0 ⊕ f(x)> − |1 ⊕ f(x)>)/√2
           = (−1)^f(x) · |x>|−>

f(x)=0 なら符号はそのまま、f(x)=1 なら符号が反転する——つまり f(x) の値が、出力ビットではなく |x> 側の「位相 (−1)^f(x)」として跳ね返って きます。これが位相キックバック(phase kickback)です。補助ビット |−> は最後まで変化せず、実質的に入力レジスタだけに (−1)^f(x) という符号が刻まれます。

なぜ位相に移すと嬉しいのか

測定で読めるのは振幅の二乗(確率)であり、位相そのものは直接見えません。しかし位相は干渉を通じて振幅に化けるf(x) を各基底状態の符号として全入力に一斉に埋め込んでおけば、次のアダマール変換で符号どうしが強め合い・打ち消し合い、f 全体の性質(定数か均衡か)を1つの読み出せる場所へ集約できます。位相キックバックは「並列計算の結果を干渉可能な形に整える」ための鍵です。

重ね合わせ全体に効かせると、入力レジスタはこうなります。

(1/√(2^n)) Σ_x (−1)^f(x) |x>

各入力 x の振幅の符号に f(x) が乗った状態です。ここまでで f の情報はすべて位相に載りました。オラクル U_f を使った回数は1回だけです。

道具3:アダマール干渉で答えを1点に集める

最後に入力レジスタへ再び H^⊗n をかけ、全状態を干渉させます。アダマール変換の一般式を使うと、出力が |00…0>(全ビット0)である振幅は次のように書けます。

状態 |00…0> の振幅 = (1/2^n) Σ_x (−1)^f(x)

この和 Σ_x (−1)^f(x) が決定的に効きます。

  • 定数のとき: すべての (−1)^f(x) が同符号なので、和は ±2^n。振幅は ±1、確率は1。測定すると必ず全ビット0 が得られる。
  • 均衡のとき: +1−1 がちょうど半々で完全に打ち消し合い、和は0。振幅は0、確率は0。全ビット0 は絶対に観測されない

したがって判定規則は明快です。測定結果が全ビット0なら定数、1ビットでも1が立っていれば均衡。干渉が「定数なら全確率を原点に集中、均衡なら原点の確率を完全に消す」という両極端を作り出すため、1回の測定で誤りなく確定します。

干渉は“完全”でなければ成立しない

この決着は、均衡時に +1−1厳密に同数で振幅がぴったり0になることに依存します。「半数ちょうどが0・半数が1」という均衡の定義と、「定数か均衡のどちらかである」という前提保証があって初めて、原点の振幅は0か±1の二択になります。もし f が任意(例えば3/4が0)だと打ち消しは不完全になり、この単純な規則は崩れます。前提が効いているのはこの一点です。

全体の流れと計算量

回路全体は「重ね合わせを作る → オラクルで位相を刻む → 干渉させて測る」という3段構成です。

|0>^n ─ H^⊗n ─┐              ┌─ H^⊗n ─ 測定(入力レジスタ)
              │   U_f (1回)   │
|1>   ─ H ────┘              └─ (|−> のまま・破棄)
段階操作状態役割
初期化入力を|0>^n、出力を|1>に|0…0>|1>干渉の土台を作る
重ね合わせ全ビットにH(1/√2^n)Σ|x>|−>全入力を並列に載せる(量子並列性)
オラクルU_fを1回(1/√2^n)Σ(−1)^f(x)|x>|−>f(x)を位相に移す(位相キックバック)
干渉入力側にH^⊗n定数:|0…0>/均衡:|0…0>成分0位相差を振幅へ変換
測定入力レジスタを読む全0か否か定数/均衡を確定

問い合わせ回数の差が、このアルゴリズムの主張です。

観点古典(決定的・誤りゼロ)量子(ドイチュ–ジョザ)
最悪の問い合わせ回数2^(n−1)+1 回1 回
誤り確率00
スケーリング入力サイズに対して指数的定数
鍵となる仕組みなし(総当たり寄り)並列性+位相キックバック+干渉
試験・面接での頻出ポイント
  • 問題定義: 定数か均衡かの二択で、どちらかであることが保証されている点まで言えること。
  • 位相キックバック: 出力ビットを |−> に用意すると U_f(−1)^f(x) を入力側に刻む——式で説明できると強い。
  • 干渉の結末: 全ビット0の振幅が (1/2^n)Σ(−1)^f(x) で、定数なら±1・均衡なら0。測定が全0なら定数。
  • 計算量差: 古典 2^(n−1)+1 回 対 量子1回。誤りゼロの分離である点が本質。
  • 限界: 「どちらか保証」の前提が無いと成立しない、実用問題ではないが後続アルゴリズムの原型。

まとめ

ドイチュ–ジョザのアルゴリズムは、量子並列性で全入力を重ね合わせ、位相キックバックで f を測れない位相に隠し、アダマール干渉でそれを1つの読み出しへ凝縮するという三段の流れそのものです。速さの正体は「たくさん計算するから」ではなく、位相に載せた情報を干渉で強め合わせ・打ち消し合わせて答えを1点に集められるから——ここが古典の総当たりと決定的に違います。実用性より原理の教材価値が高く、プログラミング 的な可逆回路の考え方や、AI で用いる線形代数(ユニタリ行列とテンソル積)に慣れていると、後続の量子アルゴリズムへの橋渡しがぐっと楽になります。

量子コンピューティング Article

ドイチュ–ジョザのアルゴリズムを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

量子アルゴリズム

比較で見る軸

難易度: advanced / カテゴリ: 量子コンピューティング / タグ数: 5

導入後に効く点

量子並列性ですべての入力を1回の重ね合わせに載せ、位相キックバックで f の値を出力ビットの符号ではなく入力側の位相へ移し、アダマール変換の干渉で答えを1回の測定に集約する。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
量子コンピューティング
タグ数
5

判断チェックリスト

  • 自社の用途が「量子アルゴリズム / 量子計算」に近いか確認する。
  • 強みである「n ビット入力の関数 f が、全入力で同じ値を返す「定数」か、ちょうど半数が0・半数が1の「均衡」かを判定する問題。前提としてどちらかであることが保証されている。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

量子アルゴリズム量子計算位相キックバックアダマール変換オラクル量子アルゴリズム量子計算位相キックバック
参考: 公式情報