nビット入力を並べ替える(入れ替える)方法は?


13

入力としてnビットシーケンスを取得し、このnビットシーケンスのシャッフル(置換)バージョンを出力として生成する量子アルゴリズムに興味があります。

たとえば、入力が0,0,1,1(この場合n = 4)の場合、可能な答えは次のとおりです。

  • 0,0,1,1
  • 0,1,0,1
  • 0,1,1,0
  • 1,0,0,1
  • 1,0,1,0
  • 1,1,0,0

すべての可能な有効な出力の中からランダムに選択される出力を1つだけ生成する必要があることに注意してください。

これを量子アルゴリズムにどのように実装するのが最適ですか?

これに対する解決策は、同じ数の1ビットで2つのnビットシーケンスを生成する量子アルゴリズムを作成する方法に対する回答の一部として既に提案されています。。しかし、この解決策の問題は、nが大きいと急速に巨大になる程度の量子ビットを必要とすることです。(n2)

注意:

  • 古典的なアルゴリズムのステップをどのようにユニバーサル量子コンピューターにマッピングできるかの説明なしに、古典的なアルゴリズムを提供しないでください。
  • 私にとって、「考えられるすべての良い出力の中からランダムに選択された」を解釈する2つの良い方法があります。(2)可能性のあるすべての出力には、0を超える可能性が選択されます。

1
入力は、長さのバイナリ文字列であるビットが1個のものであり、出力は任意のことの可能な順列を?これは、従来のコンピューターで1ステップで実行できます。あなたがしたいですalll可能な出力を?nk(nk)1
user1271772

いいえ、すべての可能な出力の中からランダムに選択される出力を1つだけ生成する必要があります。
-JanVdA

古典的なアルゴリズムで十分でしょうか?(量子コンピューターで実行することもできます。)または、sthが必要ですか。最高の古典的なアルゴリズムよりも優れているのはどれですか?
ノーベルトシュー

1
@JanVdA:古典的なコンピューターで1と0を選んで交換するだけではどうですか?
user1271772

1
希望するランダム分布を指定していないので、これらをここに残しておきます:DilbertXKCD ;)
アリ

回答:


4

これらの行に沿って追加のキュービットを使用して実行できます。logn

  1. 追加のキュービットを変換して、ランダムに一様に選択された数値をエンコードし ます。k{0,,n1}

  2. 入力キュービットを回周期的にシフトします。k

  3. 元の入力キュービットの最後を出力として固定し、残りので再帰します。n1

これは古典的なアルゴリズムですが、Norbertがコメントで示唆しているように、もちろん量子コンピューターで実行できます。(アルゴリズムが量子であることに固執する質問の側面はまだ明確ではないため、量子コンピューターで提案したような古典的なアルゴリズムを実行するだけでは十分でない場合は、質問に役立つでしょう明確にしてください。)

質問はランダムな出力を要求するため、アルゴリズムはある時点でエントロピーを生成する必要があることに注意してください。おそらく、測定またはキュービットに対する他の非ユニタリ操作(初期化など)を実行することによって。上記のアルゴリズムでは、エントロピーを生成する最初のステップです。ステップ1の操作が実行される前の追加キュービットの状態に関係なく、状態はなければなりません ステップ1が実行された後(はバイナリでエンコードされているとしましょう)。

1nk=0n1|kk|
k

答えてくれてありがとう。私は問題の実際の量子アルゴリズムに興味があります-あなたが上記の古典的なアルゴリズムを量子プログラムに写像できれば、それもうまくいくが、私はこれを行う方法がわかりません。
JanVdA

2
今、質問に焦点が当てられていると思います。あなたは本当にアルゴリズムを探しているのではなく、コードを探しているのです。私が説明したのはアルゴリズムであり、残っているタスクは、そのアルゴリズム(または別のアルゴリズム)をある言語のコードとして、または量子回路の低レベルの記述として実装することです。これをより明確にするために質問を修正することをお勧めしますが、退屈で概念的に面白くない作業を誰かに依頼していることに注意してください。これを自分で行う方法を学ぶことの代替案は気が遠くなるかもしれませんが、長期的にはより良いソリューションになる可能性があります。
ジョンワト

質問にメモを追加しました。私たちは概念量子アルゴリズムを 異なって解釈したと思います。私にとってa_classical方式_はないが、量子アルゴリズムが、内にマッピングされるかもしれない量子アルゴリズム
JanVdA

@JanVdA:量子アルゴリズムとはどういう意味ですか?たとえば、少なくとも1つのゲートを含む必要がありますか?または、少なくとも1つのゲートが必要ですか?または、他の特定のゲートセットが必要ですか?このアルゴリズムで使用するゲートセットは何ですか?YHY
user1271772

量子アルゴリズムは、汎用量子コンピューターのプログラムに(ステップレベルで)マッピングできるアルゴリズムです。量子アルゴリズムのステップの入力と出力はキュービットです(または一連のキュービットにマッピングできます)。量子アルゴリズムの最後のステップ=量子ビットの値の読み取り(観測)(量子ビットが実際のビットにマッピングされるようになる)ゲートセットに制限はありません。アイデアは、完全なアルゴリズムをユニバーサル量子コンピューターで実行できるということです。
JanVdA

3

注:この答えは、順列をコヒーレントにすること、つまり、1/3ではなくが必要であることを前提としています。チャンス、1/3の確率、及び1/3の確率。00101010013(|001+|010+|100)001010100

このタスクの指定方法には注意してください。可逆性の制約により、非常に簡単に不可能になる可能性があるためです。たとえば、入力場合、GHZ状態を出力します。ただし、入力およびのGHZ状態も出力したい場合は、機能しません。複数の入力状態を同じ出力状態に送信することはできません(デコヒーレンスなし)。「0000111のようなソートされた昇順の入力のみを気にし、1110000や0010110を気にしない;あなたがそれらを使って何でもできます」と言う限り、これは問題ありません。| 3|001| 010| 100|31=13(|001+|010+|100)|010|100

並べ替えられた入力の量子順列を生成するための1つのトリックは、最初に並べ替えネットワークを均一な重ね合わせのシード値のリストに適用することにより、「順列状態」を準備することです。並べ替えネットワークは、並べ替えられたシードを保持するキュービットを出力しますが、並べ替えネットワークの比較を保持するキュービットも出力します。順列状態は単なる比較キュービットです。入力にそれを適用するには、ソートネットワークを介して入力を逆に実行するだけです。ここには注意が必要な詳細があることに注意してください。論文「フェルミオンハミルトニアンの固有状態を準備するための改善された手法」を参照してください。この手法を一般化して、一意の値だけでなく、繰り返される値を持つ入力を処理する必要があります。

また、「量子圧縮」を調べることもできます。これは、と密接に関係しています状態(ビットが設定されたすべてのビット状態の均一な重ね合わせ)。主な違いは、量子圧縮回路を逆に実行することです。そして、「いくつあるか」をエンコードする数値を期待します。「正しい数の状態を与えて」の代わりに。NK|nknk

1|0001 | 414| 0011|41|0011|4216


13(|001+|010+|100)|00113(|001|010+i.|100

1
@JanVdA正しい、位相を使用してさまざまな出力を直交させることができます。あなたの質問の私の読書は、あなたがすべての場合に同じフェーズを望んでいたということでした。
クレイグギ

0

量子コンピューターは古典的な計算を行うことができます。最適なアルゴリズムは次のとおりです。

  1. 任意のビットを選択します(アクセスできる最速のビット)。
  2. 反対の値を持つビットを見つけます(ステップ1で0が得られた場合、1を見つけます)。
  3. それらを切り替えます(0が1になり、1が0になります)。

NO(N)nthO(N)


ありがとうございますが、アルゴリズムは2ビットのみを切り替えるため(すべての順列を生成するわけではありません)、それでも古典的なアルゴリズムですが、量子アルゴリズムを見てみたいと思います。
JanVdA
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.