グローバーのアルゴリズム
このQiskit教室モジュールの場合、学生は次のパッケージがインストールされた動作するPython環境を持っている必要があります:
qiskitv2.1.0以降qiskit-ibm-runtimev0.40.1以降qiskit-aerv0.17.0以降qiskit.visualizationnumpypylatexenc
上記のパッケージをセットアップしてインストールするには、Qiskitのインストールガイドを参照してください。 実際の量子コンピュータでジョブを実行するには、学生はIBM Cloudアカウントの設定ガイドの手順に従って、IBM Quantum®でアカウントを設定する必要があります。
このモジュールはテストされ、12秒のQPU時間を使用しました。これは誠実な見積もりです。実際の使用量は異なる場合があります。
# 必要に応じて、依存関係をインストールするためにこの行のコメントを外して変更してください
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
はじめに
グローバーのアルゴリズムは、構造化されていない検索問題に対処する基礎的な量子アルゴリズムです: 個のアイテムのセットと、任意のアイテムが探しているものであるかどうかをチェックする方法が与えられたとき、目的のアイテムをどれだけ速く見つけることができますか?古典的コンピューティングでは、データがソートされておらず、利用できる構造がない場合、最良のアプローチは各アイテムを1つずつチェックすることであり、クエリの複雑さはになります。平均して、ターゲットを見つける前に約半分のアイテムをチェックする必要があります。

1996年にLov Groverによって導入されたグローバーのアルゴリズムは、量子コンピュータがこの問題をはるかに効率的に解決できる方法を示し、マークされたアイテムを高い確率で見つけるためにステップしか必要としません。これは、古典的方法に対する二次的な高速化を表しており、大規模なデータセットにとって重要です。
アルゴリズムは次の文脈で動作します:
- 問題設定: が欲しいアイテムである場合は1を返し、そうでない場合は0を返す関数があります。この関数は、をクエリすることによってのみデータについて学習できるため、しばしばオラクルまたはブラックボックスと呼ばれます。
- 量子の有用性: この問題の古典的アルゴリズムは平均して回のクエリを必要としますが、グローバーのアルゴリズムは約回のクエリで解を見つけることができ、大きなに対してははるかに高速です。
- 動作の仕組み(高レベル):
- 量子コンピュータはまず、すべての可能なアイテムを一度に表すすべての可能な状態の重ね合わせを作成します。
- 次に、正しい答えの確率を増幅し、他の確率を減少させる一連の量子演算(グローバー反 復)を繰り返し適用します。
- 十分な反復の後、量子状態を測定すると、高い確率で正しい答えが得られます。
これは、多くのニュアンスをスキップしたグローバーのアルゴリズムの非常に基本的な図です。より詳細な図については、この論文を参照してください。

グローバーのアルゴリズムについて注意すべきいくつかの点:
- 構造化されていない検索に最適です: 回未満のクエリで問題を解決できる量子アルゴリズムはありません。
- 指数関数的ではなく二次的な高速化のみを提供します。他の量子アルゴリズム(たとえば、因数分解のためのショアのアルゴリズム)とは異なります。
- 暗号システムに対するブルートフォース攻撃を潜在的に高速化するなど、実用的な意味がありますが、高速化はそれ自体でほとんどの最新の暗号化を破るには十分ではありません。
基本的なコンピューティング概念とクエリモデルに精通している学部生にとって、グローバーのアルゴリズムは、量子コンピューティングが特定の問題に対して古典的アプローチをどのように上回ることができるかの明確な例を提供します。改善が「わずか」二次的である場合でも。また、より高度な量子アルゴリズムと量子コンピューティングのより広い可能性を理解するための入り口としても機能します。
振幅増幅は、汎用目的の量子アルゴリズム、またはサブルーチンであり、少数の古典的アルゴリズムに対し て二次的な高速化を得るために使用できます。グローバーのアルゴリズムは、構造化されていない検索問題でこの高速化を最初に実証しました。グローバーの検索問題を定式化するには、1つ以上の計算基底状態を見つけたい状態としてマークするオラクル関数と、マークされた状態の振幅を増加させ、その結果残りの状態を抑制する増幅回路が必要です。
ここでは、グローバーオラクルを構築する方法を示し、Qiskit回路ライブラリのGroverOperatorを使用してグローバーの検索インスタンスを簡単にセットアップします。ランタイムSamplerプリミティブにより、グローバー回路のシームレスな実行が可能になります。
数学
バイナリ文字列を単一のバイナリ変数にマッピングする関数が存在するとします。つまり
で定義された1つの例は
で定義された別の例は
が1にマッピングされる引数に対応する量子状態を見つけるタスクがあります。言い換えれば、となるすべてのを見つけます(または解がない場合は、それを報告します)。非解をと呼びます。もちろん、量子状態を使用して量子コンピュータでこれを行うので、これらのバイナリ文字列を状態として表現することが有用です:
量子状態(ディラック)表記法を使用すると、個の可能な状態のセット内の1つ以上の特別な状態を探しています。ここで、は量子ビットの数であり、非解はと表されます。
関数は、オラクルによって提供されると考えることができます: クエリして状態への効果を決定できるブラックボックス。実際には、関数を知っていることが多いですが、実装が非常に複雑な場合があり、つまりのクエリまたはアプリケーションの数を減らすことが重要である可能性があります。あるいは、ある人が別の人によって制御されているオラクルをクエリしているパラダイムを想像することができます。そのため、オラクル関数を知らず、特定の状態に対するそのアクションのみをクエリから知っています。
これは「構造化されていない検索問題」であり、検索を支援するに関する特別なものは何もないという意味です。出力はソートされておらず、解がクラスターを形成すること は知られていません。紙の電話帳を例えとして考えてください。この構造化されていない検索は、特定の__番号__を探してそれをスキャンするようなもので、アルファベット順の名前のリストを調べるようなものではありません。
単一の解が求められる場合、古典的には、これにはに対して線形なクエリ数が必要です。明らかに、最初の試行で解を見つけるかもしれませんし、最初の回の推測で解を見つけられない場合があり、そのため入力をクエリして解がまったくあるかどうかを確認する必要があります。関数には利用可能な構造がないため、平均して回の推測が必要になります。グローバーのアルゴリズムは、のようにスケールするのクエリまたは計算の数を必要とします。
グローバーのアルゴリズムの回路のスケッチ
グローバーのアルゴリズムの完全な数学的ウォークスルーは、たとえば、IBM Quantum LearningのJohn Watrousによるコース量子アルゴリズムの基礎にあります。簡潔な扱いは、このモジュールの最後の付録に提供されています。しかし今のところ、グローバーのアルゴリズムを実装する量子回路の全体的な構造のみをレビューします。
グローバーのアルゴリズムは、次の段階に分解できます:
- 初期重ね合わせの準備(すべての量子ビットへのアダマールゲートの適用)
- 位相反転でターゲット状態をマークする
- __すべての__量子ビットにアダマールゲートと位相反転が適用される「拡散」段階
- ターゲット状態を測定する確率を最大化するためのマーキングと拡散段階の反復の可能性
- 測定
多くの場合、マーキングゲートと、 から構成される拡散層は、まとめて「グローバー演算子」と呼ばれます。この図では、グローバー演算子の1回の反復のみが示されています。
アダマールゲートはよく知られており、量子コンピューティング全体で広く使用されています。アダマールゲートは重ね合わせ状態を作成します。具体的には次のように定義されます
他の状態に対する演算は線形性を通じて定義されます。 特に、アダマールゲートの層により、すべての量子ビットがにある初期状態(と表される)から、各量子ビットがまたはのいずれかで測定される確率を持つ状態に移行できます。これにより、古典的コンピューティングとは異なる方法で、すべての可能な状態の空間を調査できます。
アダマールゲートの重要な系特性は、2回目に作用すると、そのような重ね合わせ状態を元に戻すことができることです:
これはすぐに重要になります。
理解度チェック
以下の質問を読み、答えについて考えてから、三角形をクリックして解決策を明らかにしてください。
アダマールゲートの定義から始めて、アダマールゲートの2回目の適用が上記の主張どおりにそのような重ね合わせを元に戻すことを実証してください。
答え:
Xを状態に適用すると、値+1が得られ、状態に適用すると-1が得られます。したがって、50-50の分布がある場合、期待値0が得られます。
ゲートはあまり一般的ではなく、次のように定義されます
最後に、ゲートは次のように定義されます
これの効果は、がであるターゲット状態の符号を反転し、他の状態を影響を受けないままにすることに注意してください。
非常に高い、抽象的なレベルで、回路のステップを次の方法で考えることができます:
- 最初のアダマール層: 量子ビットをすべての可能な状態の重ね合わせに配置します。
- : 前に「-」記号を追加してターゲット状態をマークします。これはすぐに測定確率を変更しませんが、後続のステップでターゲット状態がどのように動作するかを変更します。
- 別のアダマール層: 前のステップで導入された「-」記号は、いくつかの項の間の相対的な符号を変更します。アダマールゲートは、計算状態の1つの混合を1つの計算状態に変え、をに変えるため、この相対的な符号の違いが、測定される状態で役割を果たし始めることができます。
- アダマールゲートの最後の層が適用され、次に測定が行われます。
次のセクションでは、これがどのように機能するかをより詳細に見ていきます。
例
グローバーのアルゴリ ズムがどのように機能するかをよりよく理解するために、小さな2量子ビットの例を調べてみましょう。これは、量子力学とディラック表記法に焦点を当てていない人にとってはオプションと見なされる可能性があります。しかし、量子コンピュータで実質的に作業することを望む人にとっては、これを強くお勧めします。
これは、回路全体のさまざまな位置でラベル付けされた量子状態を持つ回路図です。2つの量子ビットしかないことに注意してください。つまり、どのような状況下でも測定できる可能性のある4つの状態しかありません: 、、、。

オラクル(、私たちには未知)が状 態をマークすると仮定しましょう。オラクルを含む各量子ゲートのセットのアクションを調べて、測定時にどのような可能な状態の分布が出てくるかを見ていきます。
最初に、次のようになります
アダマールゲートの定義を使用すると、次のようになります
これで、オラクルはターゲット状態をマークします:
この状態では、4つの可能な結果すべてが測定される同じ確率を持っていることに注意してください。それらはすべて大きさの重みを持っています。つまり、それぞれが測定されるの確率を持っています。したがって、状態は「-」位相を通じてマークされていますが、これはまだこの状態を測定する確率の増加をもたらしていません。次のアダマールゲートの層を適用し続けます。