これは、量子並列処理を利用することにより、我々は、関数計算できることはよく知られているの多くの異なる値についてのxを同時に。ただし、各値の情報を抽出するには、いくつかの巧妙な操作が必要です。つまり、Deutschのアルゴリズムを使用します。
逆のケースを考えてみましょう。量子並列を使用して、単一の値x 0に対して多くの関数(たとえば、)を同時に計算できますか?
これは、量子並列処理を利用することにより、我々は、関数計算できることはよく知られているの多くの異なる値についてのxを同時に。ただし、各値の情報を抽出するには、いくつかの巧妙な操作が必要です。つまり、Deutschのアルゴリズムを使用します。
逆のケースを考えてみましょう。量子並列を使用して、単一の値x 0に対して多くの関数(たとえば、)を同時に計算できますか?
回答:
正確な答えは、希望する重ね合わせの種類によって異なります。ピラミッドとニールの答えはどちらもあなたに次のようなものを与えます
ここでは、さまざまな関数、f 2のラベル付けにNielを使用しましたなどしましたは、重ね合わせたい関数の総数です。また、F tを使用して、ストアドプログラムとしての関数f tの説明を示しました。Aは正規化されるべき状態のために存在する必要があるだけどんな数です。
これは単に重ね合わせではないことに注意してください。ストアドプログラムと絡み合っています。格納されたプログラムを追跡すると、f t(x )の混合が発生します。これは、保存されたプログラムが「ガベージ」を構成する可能性があることを意味します。またはそうでないかもしれません。この重ね合わせが計算でどのように使用されるかによって異なります。
ごみを捨てたい場合は、さらに注意が必要です。たとえば、効果があるユニタリーが必要だとします。
すべての可能な入力(計算ベースで記述されたビット文字列であると想定しています)。関数の出力が入力より長い場合に備えて、入力側にいくつかの空の量子ビットも含めたことに注意してください。
これから、関数が満たさなければならない条件を非常にすばやく見つけることができます。入力状態は直交セットを形成するため、出力もそうでなければなりません。これは、この方法で組み合わせることができる関数の種類に大きな制限を課します。
異なる計算ブランチで評価する関数は、まったく計算可能にするために、何らかの方法で指定できる必要があります(たとえば、一連の古典的な論理ゲート)。そして、計算したい関数のセット{ f 1、f 2、… }自体も計算可能でなければなりません。与えられたtに対して、その引数に対してf tがどのように計算されるかの仕様を計算できなければなりません。実際には、関数f tを説明する手段が必要です ストアドプログラムとして。(これらはすべて、量子計算を検討する前であっても、「入力x 0で関数1つまたはすべてを計算する」という質問が意味を持つために必要です。)
ストアドプログラムとして関数を指定する方法があれば、基本的には完了です。プログラムは本質的に別の種類の入力であり、たとえば、計算によって固定入力または入力の重ね合わせで評価することができます。各ブランチの仕様からの機能。
そうすることで比較優位を獲得することは別の問題であり、関数f tに特定の構造を含める必要がありますあなたはの利点を取ることができることができますが、ために十分な情報を持っている場合は、単純に「重ねて評価する」とは、簡単に行われます賢明である質問。
関数与え回路記述としてUのFと回路与えグラムとしてUのグラムを、これを行うことについて移動するいくつかの方法があります。
のキュービットレジスタから 00 のx ⟩、状態の準備αを| 01 ⟩ + β | 10 ⟩最初の二つのレジスタに。これは、最初のレジスタにユニタリ1を適用して、そのレジスタを状態α |に設定することで実行できます。0 ⟩ + β | 1 ⟩ CNOTを適用する前に、その後、。次に、最初のレジスタから3番目のレジスタにC U fを適用し、2 番目のレジスタから3番目のレジスタにC U gを適用します。
1.1。これは、第3のレジスタ状態にあることを与える、時の初期操作(最大I ⊗ Xが、新しい、異なる関数である
与えられる1