Deutschのアルゴリズムはクエリ問題においてすべての古典アルゴリズムを上回りますが、その優位性は比較的控えめです。クエリ数は1回対2回です。
Deutsch-Jozsaアルゴリズムはこの優位性を拡張します。そして実際に、2種類の異なるクエリ問題を解くために使用できます。
以下はDeutsch-Jozsaアルゴリズムの量子回路の説明です。
解こうとしている具体的な問題によっては、図には示されていない追加の古典後処理ステップも必要になる場合があります。
もちろん、このアルゴリズムがどのような問題を解くかについてはまだ説明していません。これについては続く2つのセクションで説明します。
Deutsch-Jozsa問題
まず、Deutsch-Jozsaアルゴリズムが元々解くことを意図していたクエリ問題、すなわちDeutsch-Jozsa問題 から始めます。
この問題の入力関数は、任意の正の整数 n n n に対して f : Σ n → Σ f:\Sigma^n \rightarrow \Sigma f : Σ n → Σ という形を取ります。
Deutschの問題と同様に、f f f が定数であれば 0 0 0 を出力し、f f f が平衡であれば 1 1 1 を出力するというタスクです。ここで平衡とは、関数が 0 0 0 の値を取る入力文字列の数が、関数が 1 1 1 の値を取る入力文字列の数と等しいことを意味します。
n n n が 1 1 1 より大きい場合、f : Σ n → Σ f:\Sigma^n \rightarrow \Sigma f : Σ n → Σ という形の関数で、定数でも平衡でもないものが存在することに注意してください。
例えば、次のように定義された関数 f : Σ 2 → Σ f:\Sigma^2\rightarrow\Sigma f : Σ 2 → Σ は、
f ( 00 ) = 0 f ( 01 ) = 0 f ( 10 ) = 0 f ( 11 ) = 1 \begin{aligned}
f(00) & = 0 \\
f(01) & = 0 \\
f(10) & = 0 \\
f(11) & = 1
\end{aligned} f ( 00 ) f ( 01 ) f ( 10 ) f ( 11 ) = 0 = 0 = 0 = 1
これらの2つのカテゴリのいずれにも属しません。
Deutsch-Jozsa問題では、このような関数を単純に考慮しません。これらは「どちらでもよい」入力として扱われます。
すなわち、この問題では f f f が定数か平衡のどちらかであるという約束 があります。
Deutsch-Jozsa問題
入力:関数 f : { 0 , 1 } n → { 0 , 1 } f:\{0,1\}^n\rightarrow\{0,1\} f : { 0 , 1 } n → { 0 , 1 }
約束:f f f は定数か平衡のどちらかである
出力:f f f が定数なら 0 0 0 、f f f が平衡なら 1 1 1
1回のクエリによるDeutsch-Jozsaアルゴリズムは、次の意味でこの問題を解きます。
n n n 個の測定結果がすべて 0 0 0 であれば、関数 f f f は定数です。
そうでなく、測定結果の少なくとも1つが 1 1 1 であれば、関数 f f f は平衡です。
別の言い方をすると、上記の回路に続いて、測定結果のORを計算して出力を生成する古典後処理ステップが行われます。
アルゴリズムの解析
Deutsch-Jozsa問題に対するDeutsch-Jozsaアルゴリズムの性能を解析するには、まず1層のアダマールゲートの作用について考えるとよいでしょう。
アダマール演算は通常の方法で行 列として表すことができます。
H = ( 1 2 1 2 1 2 − 1 2 ) , H = \begin{pmatrix}
\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\[2mm]
\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}}
\end{pmatrix}, H = ( 2 1 2 1 2 1 − 2 1 ) ,
しかし、この演算を標準基底状態への作用として表すこともできます。
H ∣ 0 ⟩ = 1 2 ∣ 0 ⟩ + 1 2 ∣ 1 ⟩ H ∣ 1 ⟩ = 1 2 ∣ 0 ⟩ − 1 2 ∣ 1 ⟩ . \begin{aligned}
H \vert 0\rangle & = \frac{1}{\sqrt{2}} \vert 0 \rangle + \frac{1}{\sqrt{2}} \vert 1 \rangle\\[3mm]
H \vert 1\rangle & = \frac{1}{\sqrt{2}} \vert 0 \rangle - \frac{1}{\sqrt{2}} \vert 1 \rangle.
\end{aligned} H ∣0 ⟩ H ∣1 ⟩ = 2 1 ∣0 ⟩ + 2 1 ∣1 ⟩ = 2 1 ∣0 ⟩ − 2 1 ∣1 ⟩ .
これら2つの式は1つの公式にまとめることができます。
H ∣ a ⟩ = 1 2 ∣ 0 ⟩ + 1 2 ( − 1 ) a ∣ 1 ⟩ = 1 2 ∑ b ∈ { 0 , 1 } ( − 1 ) a b ∣ b ⟩ , H \vert a \rangle = \frac{1}{\sqrt{2}} \vert 0 \rangle + \frac{1}{\sqrt{2}} (-1)^a \vert 1 \rangle
= \frac{1}{\sqrt{2}} \sum_{b\in\{0,1\}} (-1)^{ab} \vert b\rangle, H ∣ a ⟩ = 2 1 ∣0 ⟩ + 2 1 ( − 1 ) a ∣1 ⟩ = 2 1 b ∈ { 0 , 1 } ∑ ( − 1 ) ab ∣ b ⟩ ,
これは a ∈ Σ a\in\Sigma a ∈ Σ のどちらの選択に対しても成り立ちます。
次に、1量子ビットだけでなく n n n 個の量子ビットがあり、それぞれにアダマール演算が行われるとします。
n n n 個の量子ビットに対する合成演算はテンソル積 H ⊗ ⋯ ⊗ H H\otimes \cdots \otimes H H