Groverのアルゴリズム:リストはどこにありますか?


15

Groverのアルゴリズムは、とりわけ、アイテム順不同リスト内のアイテムyを検索するために使用されますの長さ。このトピックに関して多くの質問がここにありますが、私はまだポイントを逃しています。[x0,x1,...,xn1]n

リスト内の検索、古典的な方法

通常、この方法で検索関数を設計します したがって、リストと必要な項目を入力として与え、位置を受け取りますリスト内のアイテムの出力として。に関する情報はオラクルゲートOを介してアルゴリズムに埋め込まれているため、関数は \ mathrm {search} _ \ mathbf {y}([\ mathbf {x} _1、\ mathbf {X} _2、...、\ mathbf {X} _n)= I \で\ mathbb {N} \クワッド\テキスト{よう} \ mathbf {X} _i = \ mathbf {Y} レッツメイクA実際の例。スペードのエース1 \ spadesuitを検索することを検討してください

search([x0,x1,...,xn1],y)=iNsuch that xi=y
yO
searchy([x1,x2,...,xn])=iNsuch that xi=y
1標準の52カードデッキからの8枚のカードのシーケンス:

シャッフルデッキ

長さのリストは。8[x0=J, x1=10, x2=4, x3=Q, x4=3, x5=1, x6=6, x7=6]

必要な要素はです。を取得する必要があります。各カードはビットでエンコードできます。リストには要素があるため、リストをエンコードするにはビットが必要です。この場合、Oracleは次の関数を実装します: x5search(cards)=5log252=686×8=48O

f(x)={1,x=10,otherwise

ただし、Groverのアルゴリズムの入力は48キュビットの状態ではありません。

(NB:シャッフルされたデッキのイメージはここから取られます

グローバーとその神託

いくつかのソース(たとえば、ここで -グラフィックで説明)は、アルゴリズムの入力が異なると言っています。入力は、検索空間リストの要素の数です。各番号は、リスト内の要素の位置に対応しています。S={0,1,2,...,N}={0,1,2,...,7}N

入力 A今量子ビットベクトル探索空間内のすべてのアイテムの重ね合わせである必要があり、。search()log28=3|ψS

知ってる

  • |03qubits=|000は対応します。J
  • |13qubits=|001は対応します。10
  • |23qubits=|010は対応します。4
  • |53qubits=|101は、必要な要素である対応します。1
  • 等々...

この場合、 しかし、この場合、オラクルは関数

search(|ψ)=|53qubits
f(|ψ)={1,|ψ=|53qubits0,otherwise

オラクルを構築するには、が位置5にあることを知る必要があります。オラクルを構築するためにすでに要素を検索している場合、アルゴリズムを実行するポイントは何ですか?


Groverのアルゴリズムの利点を理解するのも困難です。リストにN個のアイテムがあるとします。Oracleを呼び出すたびに、N個すべての可能性を評価しましたか?評価が非常に高速であっても、すべての構成を繰り返す必要がある場合でも、Oracle評価の複雑さはO(N)です。したがって、Groverのアルゴリズムは、ダム検索よりも高速ではないようです。これは正しいです?
サンパリスマルカタット

@SanparithMarukatatそれは正しくありません。リストの項目は、検索に関係する州の重ね合わせの用語です。Oracleがこの状態で動作する場合、単一の操作としてカウントされます。重ね合わせの検索対象用語をマークするOracleの機能は、Groverの洞察の基本的な部分です。Groverのアルゴリズムを理解するために、まず、この状態をマークする方法を理解することをお勧めします。その後、国家の役割を理解してください Oracleの|
R.ショパン

それを理解したら、重ね合わせの不要な項の振幅を減少させながら、重ね合わせの所望の項の振幅を増加できる演算子を研究する必要があります。私にとって、Groverにアプローチする最も簡単な方法は、平均についての逆演算子を調べることです。(一部の人々は幾何学的な見方をしますが、私はそれを明確に見つけません。)
R.ショパン

回答:


10

リストに8つのアイテムがある場合(カードの例のように)、Oracleの入力は3(qu)ビットです。デッキ内のカードの数(52)は無関係です。8ビットのカードをエンコードするために必要なのは3ビットのみです。

3ビットは、検索しているカードのリスト内の位置をエンコードすると考えることができます。あなたはその位置を知らないが、神託は知っている。したがって、スペードのエースを検索している場合、オラクルはスペードのエースが6番目のカード(またはゼロから5番目のカウント)であることを認識し、関数

f(x)={1,if x = 5, or binary '101'0,otherwise

PS:Groverのアルゴリズムを異なる方法で考える方が良いです。入力ビットの単一の組み合わせに対してを出力し、それ以外の場合は0 を出力するブール関数を実装するOracleがあり、タスクは組み合わせを見つけることです。この問題は、ソートされていないリストまたはデータベースでの検索と同じ複雑さを持っているため、Groverのアルゴリズムは通常、ソートされていないデータベースでの検索と呼ばれます。しかし、実際のデータベース検索にアルゴリズムを適用すると、実際にはアルゴリズム自体を超えた疑問が生じます。Groverのアルゴリズムは、オラクルが知っていることを探しているだけです。1


はい、申し訳ありませんが、その6は以前の編集からのもの
でした

2
ご回答ありがとうございます。誤記を修正しました。オラクルを構築するために検索された要素の位置を知る必要がある場合、アルゴリズムを実行するポイントは何ですか?
18年

1
@incud確かに意味がありません。答えを更新しました。
kludg

グローバーのアルゴリズムは、オラクルが知っていることを探しているだけです」とは限りません。オラクルは、入力の特定のプロパティのみをチェックしているため、最後に取得される結果には、オラクルitsefでエンコードされた情報よりも多くの情報が含まれます。典型的な例は、電話帳での検索です。Oracleは、特定の名前に添付レコードの「尋ねる」が、正しいレコードが見つかったら、人はまた、Oracleにすべてでエンコードされていなかった、そのレコードに添付電話番号、追加の情報を得る
GLS

4

オラクルの機能がこれらの値をすべて計算済みであると考えるのはおそらく最も簡単ですが、それはそれがしていることではありません。あなたが説明した場合、オラクルは8つの可能な入力(すなわち3(qu)ビットでエンコード)を持ち、オラクルは必要なすべての計算をその場で行います。したがって、ある値についてオラクルを評価しようとすると、オラクルは(この例では)xの値がxxに対応し、そのカードがマークされたカードであるかどうかを確認します。あなたが神託を呼び出すたびに、それはそのプロセスを一度通過するという考えです。全体的に、oracleを呼び出す回数に等しい回数、関数を評価します。検索アルゴリズムの目的は、そのオラクルをできるだけ少ない回数呼び出すことです。

これが少し円形に聞こえる場合(入力与えられ、対応するカードを見つけます)、xが対応するカードのルックアップテーブルを注文できることを覚えておいてください。xx

より現実的な使用シナリオと比較した例の主な違いは次のとおりです。

  • 通常、検索スペースは大規模です。すべての値を事前計算する現実的な見通しはありません。実際、それはまさに私たちが避けようとしていることです。

  • 通常、実際に「スペードのエースを見つける」とは言いません。代わりに、xが「マークされた」アイテムであるかどうかをテストするために評価するのに重要ながあります。オラクルは、単一のエントリであっても評価に非常に長い時間がかかるという事実が、オラクルを実装するコストのかかる部分にしている理由であり(そして他のすべてのゲートは無料で提供されます)、呼び出し回数を最小限に抑える必要がある理由です。f(x)x

したがって、実際には、古典的な検索が問題に対して機能する方法は、をランダムに選択することです。y = f x )を評価します。y = 1の場合はxを返し、そうでない場合は繰り返します。f x 正味の効果は「入力x 0、マークされたエントリ?」ですが、それは実際の計算ではありません。xy=f(x)y=1xf(x)x0


2

問題は、最終的には「オラクルを構築するためにすでに要素を検索している場合、アルゴリズムを実行するポイントは何ですか?」です。

誰かが神託を事前に構築している間、それは神託を使用している人ではなかったかもしれません。

Groverのアルゴリズムは、オラクルがsize of list。当然、以前に提案したように、評判の欠如についてコメントできないそれぞれのデータベース検索を期待することはできません。たとえば、コンテンツがこれらの500万キーのいずれによってもアドレス指定されていない場合、500万キーが必要なコンテンツを返しますが、 900万番目のキー。サンプルには含まれていません。Groverのアルゴリズムはどのようにそれを行いますか?

私たちはオラクルに尋ねます:すでに持っている質問に対して、すでに持っている答えは何ですか?MateusとOmarでさえ、実行時に「oracle-for-a-particular-alphabet-symbol」を尋ねますが、すでにコンパイルされている文字列内のシンボルの位置は何ですか?オラクルは、たった1回の相談でクエリに回答しますが、この話では、たとえば、単にバイナリ文字列として回答を書き出して、古典的な通信チャネルで送信することはできません。私たちがそれを引き出すために、その答えを重ね合わせて隠します。

私はこの次のビットで空想や比runを逃がします:私たちは最初に答えをまったく聞いていないので、オラクルが言ったことを確信するまでオラクルに同じ答えを何度も繰り返すように頼まなければなりません、ただし、何度も尋ねると拡散プロセスの誤報から幻覚を始めます。


2

あなたが提供した神託を考えると、検索は確かに無意味です。ただし、そのオラクルは、Groverのアルゴリズムのポイントを見逃しています。カードのデッキでカードを検索することは、構造化された検索ではないためです。エルゴ、検索は構造化されています。このオラクルが使用される理由は、グローバーのオラクルは価値があるよりも複雑であるため、グローバーの有用になるオラクルを議論する必要なく、グローバーの適用方法を示すためです。したがって、グローバーの有用性を実証するためのより良いオラクルは、次のようなものです。

f(x)={1,x[0,,3]+x[4,,7]=10100,otherwise

このオラクルが意味することは、最初の4つのキュービットを取得し、それらを2番目の4つのキュービットに追加し、追加で10(バイナリで1010)になる場合はMを反転する8キュービット検索があることです。このオラクルと提供したオラクルの違いは、このオラクルはパターンをテストし(オペランドを10に加算します)、あなたのオラクルは同等性をテストします(このインデックスは5です)。このオラクルは構築するのがはるかに困難ですが、グローバーの真の力を活用します。これは、本質的には、オラクルが検索スペースを定義するブルートフォース検索です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.