量子並列を使用して一度に多くの関数を計算できますか?


9

これは、量子並列処理を利用することにより、我々は、関数計算できることはよく知られているの多くの異なる値についてのxを同時に。ただし、各値の情報を抽出するには、いくつかの巧妙な操作が必要です。つまり、Deutschのアルゴリズムを使用します。f(x)バツ

逆のケースを考えてみましょう。量子並列を使用して、単一の値x 0に対して多くの関数(たとえば、)を同時に計算できますか?f(x)、g(バツ)、…バツ0


とg (x 0)を評価するには、各操作ごとにx 0のコピーを作成する必要があります。これは、一般に非複製定理では不可能です。一方、x 0の 2倍の状態を準備するだけであれば、古典的な並列処理を復元するだけです。f(バツ0)g(バツ0)バツ0バツ0

@HenriMenke不完全なクローニングはどうですか?
— donnydm

@HenriMenke:「クローニング」が何であるかについてのあなたの考えは、問題に生産的に取り組む能力にいくつかの障害をもたらす点まで、非常に広範に見えます。
— Niel de Beaudrap

回答:


5

正確な答えは、希望する重ね合わせの種類によって異なります。ピラミッドとニールの答えはどちらもあなたに次のようなものを与えます

A∑t=1n|ft(x)⟩⊗|Ft⟩

ここでは、さまざまな関数、f 2のラベル付けにNielを使用しましたf1f2などしましたは、重ね合わせたい関数の総数です。また、F tを使用して、ストアドプログラムとしての関数f tの説明を示しました。Aは正規化されるべき状態のために存在する必要があるだけどんな数です。nFtftA

これは単に重ね合わせではないことに注意してください。ストアドプログラムと絡み合っています。格納されたプログラムを追跡すると、f t(x )の混合が発生します。これは、保存されたプログラムが「ガベージ」を構成する可能性があることを意味します。またはそうでないかもしれません。この重ね合わせが計算でどのように使用されるかによって異なります。ft(x)ft(x)

ごみを捨てたい場合は、さらに注意が必要です。たとえば、効果があるユニタリーが必要だとします。U

U:|x⟩⊗|0⟩⊗N→A∑t=1n|ft(x)⟩

すべての可能な入力(計算ベースで記述されたビット文字列であると想定しています)。関数の出力が入力より長い場合に備えて、入力側にいくつかの空の量子ビットも含めたことに注意してください。バツ

これから、関数が満たさなければならない条件を非常にすばやく見つけることができます。入力状態は直交セットを形成するため、出力もそうでなければなりません。これは、この方法で組み合わせることができる関数の種類に大きな制限を課します。


ありがとう、私はこの方法でテイラー展開計算のようにsthを高速化できると思います。とにかく、保存されたプログラムにアクセス/測定して情報を得ることはできますか?それとも単なるツールですか?
— donnydm

保存されたプログラムはキュビットのレジスタに書き込まれるだけなので、確実に操作できます。
— James Wootton

5

異なる計算ブランチで評価する関数は、まったく計算可能にするために、何らかの方法で指定できる必要があります(たとえば、一連の古典的な論理ゲート)。そして、計算したい関数のセット{ f 1、f 2、… }自体も計算可能でなければなりません。与えられたtに対して、その引数に対してf tがどのように計算されるかの仕様を計算できなければなりません。実際には、関数f tを説明する手段が必要ですf、g、… {f1,f2,…}tftftストアドプログラムとして。(これらはすべて、量子計算を検討する前であっても、「入力x 0で関数1つまたはすべてを計算する」という質問が意味を持つために必要です。)f1,f2,…x0

ストアドプログラムとして関数を指定する方法があれば、基本的には完了です。プログラムは本質的に別の種類の入力であり、たとえば、計算によって固定入力または入力の重ね合わせで評価することができます。各ブランチの仕様からの機能。

そうすることで比較優位を獲得することは別の問題であり、関数f tに特定の構造を含める必要がありますftあなたはの利点を取ることができることができますが、ために十分な情報を持っている場合は、単純に「重ねて評価する」とは、簡単に行われます賢明である質問。


3

はい(「一度に多くの関数を計算する」の意味によって異なります)

関数与え回路記述としてUのFと回路与えグラムとしてUのグラムを、これを行うことについて移動するいくつかの方法があります。fUfgUg

  1. のキュービットレジスタから 00 のx ⟩、状態の準備αを| 01 ⟩ + β | 10 ⟩最初の二つのレジスタに。これは、最初のレジスタにユニタリ1を適用して、そのレジスタを状態α |に設定することで実行できます。0 ⟩ + β | 1 ⟩|00バツ⟩α|01⟩+β|10⟩α|0⟩+β|1⟩ CNOTを適用する前に、その後、。次に、最初のレジスタから3番目のレジスタにC U fを適用し、2 番目のレジスタから3番目のレジスタにC U gを適用します。私⊗バツCUfCUg

    1.1。これは、第3のレジスタ状態にあることを与える、時の初期操作(最大I ⊗ X(αUf+βUg)|バツ⟩私⊗バツαUf+βUgfgが、新しい、異なる関数であるf+g

    fg

  2. |xx⟩UfUg|x⟩

  3. |0x⟩α|0⟩+β|1⟩IF RESULT = 0 U_f ELSE U_gE(ρ)=|α|2UfρUf†+|β|2UgρUg†


与えられる1

(α−β∗βα∗)


保存されたプログラムが必要ないため、これは興味深いものです。1番のCNOTは必要ですか?
— donnydm 2018

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