Scott Aaronsonによるこのブログ投稿は、Shorのアルゴリズムの非常に便利で簡単な説明です。
:二番目に有名な量子アルゴリズムのためのそのような説明があれば、私は思ったんだけどグローバーのアルゴリズム検索する順不同サイズのデータベース中に時間が。O (√
特に、実行時間の最初の驚くべき結果について、わかりやすい直観を見てみたいです!
Scott Aaronsonによるこのブログ投稿は、Shorのアルゴリズムの非常に便利で簡単な説明です。
:二番目に有名な量子アルゴリズムのためのそのような説明があれば、私は思ったんだけどグローバーのアルゴリズム検索する順不同サイズのデータベース中に時間が。O (√
特に、実行時間の最初の驚くべき結果について、わかりやすい直観を見てみたいです!
回答:
Craig Gidneyによる良い説明がここにあります(彼は彼のブログにも回路シミュレータを含む他の素晴らしいコンテンツがあります)。
基本的に、GroverのアルゴリズムはTrue
、可能な入力の1つとFalse
他のすべての入力に戻る関数がある場合に適用されます。アルゴリズムの仕事は、戻るものを見つけることTrue
です。
これを行うには、入力をビット文字列として表現し、キュービットの文字列のおよび状態を使用してこれらをエンコードします。したがって、ビット文字列は、たとえば4量子ビット状態でエンコードされます。0011
また、量子ゲートを使用して関数を実装できる必要があります。具体的には、単一の実装するゲートのシーケンスを見つける必要があるとなるように
ここでは関数が返すビット文字列で、は関数が返すビット文字列です。True
False
すべての可能性のあるビット文字列の重ね合わせから開始する場合、これはすべてをアダマールするだけで簡単に実行でき、すべての入力は同じ振幅の(ここでは検索対象のビット列の長さ、したがって使用しているキュービットの数)。しかし、その後オラクル適用すると、探している状態の振幅は変わります。
これは容易に観察できる違いではないため、これを増幅する必要があります。これを行うために、我々は使用グローバー拡散演算子、。この演算子の効果は、基本的に各振幅が平均振幅とどのように異なるかを見てから、この差を反転させることです。したがって、特定の振幅が平均振幅よりも大きい特定の量である場合、同じ量が平均よりも小さくなる、またはその逆になります。
具体的には、ビット文字列重ね合わせがある場合、拡散演算子には効果があります
ここで、は平均振幅です。任意の振幅だから、になってます。この効果がある理由と実装方法については、これらの講義ノートを参照してください。
ほとんどの振幅は平均よりわずかに大きくなるため(単一のの影響により)、平均値よりもわずかに小さくなります。この操作。大きな変化ではありません。
探している州は、より強く影響を受けます。その振幅は平均よりもはるかに小さいため、拡散演算子を適用すると平均よりもはるかに大きくなります。したがって、拡散演算子の最終結果は、すべての間違った答えから振幅をスキミングし、それを正しい答えに追加する干渉効果を状態に引き起こすことです。このプロセスを繰り返すことにより、私たちのソリューションが群衆から際立って目立つようになり、特定できるようになります。
もちろん、これはすべて、すべての作業が拡散演算子によって行われていることを示しています。検索は、接続できるアプリケーションにすぎません。
グラフィカルなアプローチは、技術的になりすぎずに洞察を与えるのに非常に良いと思います。入力が必要です。
この最後の操作は、マークされたアイテムを-1フェーズでマークできる操作です。我々はまた、状態を定義することができに直交であることようのスパンのための正規直交基礎を形成します。定義した両方の操作はこのスペースを保持します:のスパンのある状態から開始し、スパン内の状態を返します。さらに、両方ともユニタリですので、入力ベクトルの長さは保持されます。| X ⟩ { | X ⟩ 、| ψ ⊥ ⟩ } { | X ⟩ 、| ψ ⟩ } { | X ⟩ 、| ψ ⊥ ⟩ }
2次元空間内の固定長のベクトルは、円の円周として視覚化できます。したがって、と対応する2つの直交方向を持つ円を設定しましょう。 | X ⟩
初期状態にはとの小さなオーバーラップ、およびとの大きなオーバーラップがあります。それは他の方法で回避した場合、検索が簡単だろう:私たちは準備したい、対策を、マーキング一体型を使用して出力をテストし、我々はマークされたアイテムを得たまで繰り返します。長くはかからないでしょう。との間の角度を角度と呼びましょう。 | X ⟩ | ψ ⊥は ⟩ | ψ ⟩ | ψ ⟩ | ψ ⊥は ⟩ θ
それでは、2つの単一アクションが何をするのかを考えてみましょう。両方とも-1の固有値を持ち、他のすべての固有値は+1です。2次元の部分空間では、+ 1固有値と-1固有値になります。このような操作は、+ 1固有ベクトルによって定義される軸への反映です。したがって、は軸の反射であり、は軸の反射です。
次に、この空間で任意のベクトルを取得し、後にを適用します。最終的な効果は、ベクトルが角度だけ軸に向かって回転することです。
したがって、から開始する場合は、これを十分に繰り返して、角度内に到達できます。したがって、その状態を測定すると、値が高い確率で得られます。
ここで、スピードアップを見つけるために少し注意が必要です。でが見つかる確率はと仮定します。そのため、古典的には、それを見つける必要があります。私たちの量子シナリオでは、我々は持っている(以降小さい)、そして我々は実行回数がしたいように。だから、。平方根の高速化がすぐにわかります。