Path: blob/main/translations/ja/ch-algorithms/bernstein-vazirani.ipynb
3855 views
ベルンシュタイン・ヴァジラニ アルゴリズム
本節では、まず、ベルンシュタイン・ヴァジラニ問題と、それを解くための古典的アルゴリズムと量子アルゴリズムを紹介します。次に、Qiskitを用いて量子アルゴリズムを実装し、シミュレーターと実デバイス上でそれぞれ実行します。
1. ベルンシュタイン・ヴァジラニ アルゴリズム
参考文献[1]で最初に紹介されたベルンシュタイン・ヴァジラニ アルゴリズムは、前節で取り上げたドイチ・ジョザ アルゴリズムの拡張として見ることができます。このアルゴリズムは、ドイチ・ジョザ問題と比較して、より複雑な問題の計算ツールとして量子コンピューターを使用することに利点があることを示しました。
1.1 ベルンシュタイン・ヴァジラニ問題
我々は再び、以下のような隠されたブール関数を与えられます。この関数は、ビットの文字列 () を入力として受け取り、かのどちらかを返します。
ドイチ・ジョザ問題のように、均等(balanced)または一定(constant)な関数のどちらかになるのではなく、この関数は入力xと文字列sのビットごとの内積を返すことが保証されています。つまり、入力についてを満たす関数です。我々は、そのときのを見つけることを期待されています。リバーシブルな古典回路としてのベルンシュタイン・ヴァジラニのオラクルは以下のようにかけます。

1.2 古典的な解法
古典的には、オラクルは入力に対して を返します。隠れたビット文字列 の各ビットは以下の入力のシーケンスをオラクルに問合せすることで洗い出されます。
Input(x) :-: 100...0 010...0 001...0 000...1
例えば、x = 1000...0 により (ビット )の一番小さい桁のビットをみつけることができます。x = 0100...0 により の二番目に小さい桁のビットをみつけることができます。つまり、関数を 回呼び出す必要があります
1.3 量子的な解法
量子コンピューターを使うと、関数 を1回呼び出すだけで、この問題を100%の確度で解くことができます。隠れたビット文字列を見つける量子ベルンシュタイン・ヴァジラニ アルゴリズムは非常にシンプルです。
入力量子ビットを に、出力量子ビットを状態に初期化
アダマールゲートを入力量子ビットに適用
オラクルをクエリ
入力レジスタにアダマールゲートを適用
測定

アルゴリズムを説明するために、各量子ビットにアダマールゲートを適用したときに何が起きるのかをみてみましょう。量子ビットの量子状態 にアダマールゲートを適用すると以下の変換をみることができます。
アダマールゲートは1つの量子ビットに対して次のような変換を行うことを思い出しましょう。
総和記号を使うことで、以下のように書き換えられます。
2つの量子ビットに対して、それぞれにアダマールゲートを適用すると、次のような変換が行われます。
総和記号で、以下のようにまとめて表現することができます。
最初の式にたどり着く方法がこれで理解できるかと思います。
特に、に初期化された量子レジスタから始めて、 個のアダマールゲートをかけると、おなじみの量子重ね合わせができます。
この場合、により となることから、位相 が消えます。
さて、古典のオラクル は、を満たす任意の入力 に対して を、それ以外のときは を返します。ドイチ・ジョザでも用いたに対する位相キックバックのテクニックを利用することで、以下の変換を得られます。
隠れた文字列を明らかにするアルゴリズムは、のアダマール変換から得られた量子的な重ね合わせで、量子オラクルを問い合わせることで、自然に次のようになります。
個のアダマールゲートの逆行列は、再び 個のアダマールゲートなので、次のようにして を求めることができます。
2. 具体例
の量子ビットと秘密の文字列 で具体的な例を見てみましょう。ここでは、参考文献 [2] の定式に従って、1つのレジスタだけを使ってベルンシュタイン・ヴァジラニ量子オラクルのための回路を生成していることに注意してください。
- 2つの量子ビットのレジスタは0に初期化されています。
以下のウィジェット bv_widget を活用してください。ボタンを押してそれぞれのステップを適用し、アルゴリズムを実行してみてください。最初の2つの位置引数によって、入力量子ビットの数と秘密の文字列の値を変更することができます。
まず、実験で使用する量子ビット数と、アルゴリズムが求める隠れたビット文字列 を設定します。隠れたビット文字列 は、量子オラクルの回路を決定します。
その後、Qiskitを使用してベルンシュタイン・ヴァジラニ アルゴリズムをプログラムします。
測定の結果が隠された文字列 011 であることが分かります。
見ての通り、ほとんどの結果は011です。他の結果は量子計算の誤差によるものです。
5. 参考文献
Ethan Bernstein and Umesh Vazirani (1997) "Quantum Complexity Theory" SIAM Journal on Computing, Vol. 26, No. 5: 1411-1473, doi:10.1137/S0097539796300921.
Jiangfeng Du, Mingjun Shi, Jihui Wu, Xianyi Zhou, Yangmei Fan, BangJiao Ye, Rongdian Han (2001) "Implementation of a quantum algorithm to solve the Bernstein-Vazirani parity problem without entanglement on an ensemble quantum computer", Phys. Rev. A 64, 042306, 10.1103/PhysRevA.64.042306, arXiv:quant-ph/0012114.