ドイチュのアルゴリズムは、n=1 の特殊なケースにおけるパリティ問題を解きます。
量子計算の文脈では、この問題は ドイチュの問題 と呼ばれることがあり、このレッスンでもその呼称を使用します。
正確に言えば、入力は1ビットから1ビットへの関数 f:Σ→Σ で表されます。
このような関数は4つ存在します。
a01f1(a)00a01f2(a)01a01f3(a)10a01f4(a)11
最初と最後の関数は 定数関数 であり、中央の2つは 平衡関数 です。平衡関数とは、入力全体にわたって関数の2つの出力値が同じ回数だけ現れるものを指します。
ドイチュの問題は、入力関数がどちらのカテゴリに属するかを判定することです。すなわち、定数関数か平衡関数かを判定します。
ドイチュの問題
入力: 関数 f:{0,1}→{0,1}
出力: f が定数関数なら 0、f が平衡関数なら 1
ドイチュの問題における入力関数 f を文字列へのランダムアクセスとして捉えると、2ビットの文字列 f(0)f(1) を考えることになります。
functionf1f2f3f4string00011011
このように見ると、ドイチュの問題は2ビットのパリティ(同等に、排他的論理和)を計算することに相当します。
この問題を正しく解く古典的なクエリアルゴリズムは、必ず両方のビット f(0) と f(1) をクエリしなければなりません。
たとえば f(1)=1 とわかっていても、f(0)=1 か f(0)=0 かによって答えは 0 にも 1 にもなり得ます。
他のケースも同様で、2ビットのうち1つしか知らなければ、そのパリティについての情報はまったく得られません。
したがって、前節で説明したブール回路が、この問題を解くのに必要なクエリ数の観点での最善策です。
量子回路の説明
ドイチュのアルゴリズムは、1回のクエリでドイチュの問題を解きます。これにより、量子計算が古典計算に対して定量的な優位性を持つことが示されます。
その優位性は控えめなもの——2回のクエリに対して1回——ではありますが、どこかから始めなければなりません。
科学的な進歩は、一見ささやかな発端から生まれることがあります。
以下は、ドイチュのアルゴリズムを表す量子回路です。

ドイチュのアルゴリズムを解析するため、上記の回路の動作を追いながら、以下の図に示される各時点での量子ビットの状態を確認します。

初期状態は ∣1⟩∣0⟩ であり、回路の左側にある2つのアダマール演算によってこの状態は次のように変換されます。
∣π1⟩=∣−⟩∣+⟩=21(∣0⟩−∣1⟩)∣0⟩+21(∣0⟩−∣1⟩)∣1⟩.
(常に通り、Qiskit の量子ビット順序の慣例に従い、上の量子ビットを右に、下の量子ビットを左に配置しています。)この積状態を部分的に分散して書くこと(量子ビット1の状態を因数分解したまま残すこと)は直感的でないように感じるかもしれませんが、後の式をよりコンパクトにするためです。
次に、Uf ゲートが適用されます。
Uf ゲートの定義によれば、上/右端の量子ビットの古典状態に対する関数 f の値が下/左端の量子ビットに XOR されます。これにより ∣π1⟩ は次の状態に変換されます。