古典的離散フーリエ変換の紹介:
DFTは、複素数のシーケンスを複素数の別のシーケンス変換しますは定義され必要に応じて、適切な正規化定数を掛けることができます。さらに、式でプラス記号とマイナス記号のどちらを使用するかは、選択する規則によって異なります。N{xn}:=x0,x1,x2,...,xN−1{Xk}:=X0,X1,X2,...
Xk=∑n=0N−1xn.e±2πiknN
およびあると仮定します。N=4x=⎛⎝⎜⎜⎜12−i−i−1+2i⎞⎠⎟⎟⎟
列ベクトルを見つける必要があります。一般的な方法は、すでにウィキペディアのページに表示されています。しかし、同じもののためのマトリックス表記を開発します。容易予め乗算することによって得ることができる行列による。XXx
M=1N−−√⎛⎝⎜⎜⎜11111ww2w31w2w4w61w3w6w9⎞⎠⎟⎟⎟
ここではです。行列の各要素は基本的にです。は単なる正規化定数です。we−2πiNwij1N√
最後に、あることが判明:。X12⎛⎝⎜⎜⎜2−2−2i−2i4+4i⎞⎠⎟⎟⎟
さて、しばらく座って、いくつかの重要なプロパティに注目してください。
- 行列すべての列は互いに直交しています。M
- すべての列の大きさはです。M1
- 多数のゼロを含む列ベクトルを使用して乗算をポストすると(大きな広がり)、わずかなゼロのみを含む列ベクトル(狭い広がり)になります。その逆も当てはまります。(小切手!)M
古典的なDFTには時間の複雑さがあることに非常に簡単に気付くことができます。これは、すべての行を取得するには、操作を実行する必要があるためです。そしてには行あります。O(N2)XNNX
高速フーリエ変換:
次に、高速フーリエ変換を見てみましょう。高速フーリエ変換は、フーリエ変換の対称性を使用して計算時間を短縮します。簡単に言えば、サイズフーリエ変換をサイズつのフーリエ変換(奇数項と偶数項)に書き換えます。その後、これを何度も繰り返して、指数関数的に時間を短縮します。これがどのように機能するかを詳しく見るために、フーリエ変換のマトリックスに目を向けます。これを説明している間、を目の前にて見てみると役に立つかもしれません。指数はモジュロ書き込まれたことに注意してくださいので、。NN/2DFT88w8=1
![ここに画像の説明を入力してください](https://i.stack.imgur.com/1Td1t.png)
行が行と非常に似ていることに注意してください。また、列
が列と非常に似ていることに注意してください。これに動機付けられて、フーリエ変換を偶数列と奇数列に分割します。jj+4jj+4
![ここに画像の説明を入力してください](https://i.stack.imgur.com/BdYkS.png)
最初のフレームでは、番目の行と番目の列を記述することにより、フーリエ変換行列全体を表しました:。次のフレームでは、奇数列と偶数列を分離し、同様に変換されるベクトルを分離します。最初の平等は本当に平等であると自分自身を納得させる必要があります。3番目のフレームでは、()に注目して、少し対称性を追加し
ます。jkwjkwj+N/2=−wjwn/2=−1
奇数側と偶数側の両方に用語が含まれていることに注意してください。ただし、がユニティのプリミティブN番目のルートである場合、はユニティのプリミティブ番目のルートです。したがって、、番目のエントリがである行列は、実際にはちょうどです。新しい方法でを書くことができます:ここで、関数フーリエ変換を計算していると仮定します。上記の操作は、j番目の項を計算する方程式として書くことができます。w2jkww2N/2jkw2jkDFT(N/2)DFTNf(x)f^(j)
![ここに画像の説明を入力してください](https://i.stack.imgur.com/3Zn5o.png)
注:このコンテキストでは、画像のQFTはDFTを表します。また、MはNと呼んでいるものを指します。
これは計算を 2つのアプリケーションに変えます。これをなどの4つのアプリケーションに変換でき。限り、いくつかのため、我々は我々の計算打破することができますへ
の計算。これにより、計算が大幅に簡素化されます。DFTNDFT(N/2)DFT(N/4)N=2nnDFTNNDFT1=1
高速フーリエ変換の場合、時間の複雑さは減少しこれを自分で試してみてください)。これは、古典的なDFTと、iPodなどの現代の音楽システムで使用されている最先端のアルゴリズムを大幅に改善したものです。O(Nlog(N))
量子ゲートを使用した量子フーリエ変換:
FFTの長所は、離散フーリエ変換の対称性を活用できることです。QFTの回路アプリケーションは同じ原理を使用しますが、重ね合わせの力により、QFTはさらに高速になります。
QFTはFFTによって動機付けられているため、同じ手順に従いますが、これは量子アルゴリズムであるため、手順の実装は異なります。つまり、最初に奇数部分と偶数部分のフーリエ変換を行い、次に奇数項に位相乗算します。wj
量子アルゴリズムでは、最初のステップは非常に簡単です。奇数項と偶数項は重なり合っています。奇数項は最下位ビットがで、偶数がです。したがって、を奇数項と偶数項の両方に一緒に適用できます。これを適用するには、を最上位ビットに適用し、アダマールを最下位ビットに適用することにより、奇数および偶数を適切に再結合します。10QFT(N/2)QFT(N/2)n−1
ここで位相乗算を実行するには、各奇数項に位相を乗算する必要があります。ただし、バイナリの奇数はで終わり、偶数はで終わることに注意してください。したがって、最下位ビットが制御である制御された位相シフトを使用して、偶数項に何もせずに奇数項のみに位相を掛けることができます。制御された位相シフトは、制御ビットが1の場合にのみターゲットに位相を適用するという点で、CNOTゲートに似ていることを思い出してください。jwj10
![ここに画像の説明を入力してください](https://i.stack.imgur.com/4MbDF.png)
注:画像では、MはNと呼んでいるものを指します。
各制御された位相シフトに関連付けられた位相は、に等しくなければなりません
ここで、はによって番目のビットに関連付けられます。したがって、制御として最下位ビットを使用して、制御された位相シフトを最初のキュビットのそれぞれに適用します。制御された位相シフトとアダマール変換により、は削減されました。wjjkj=2kn−1QFTNQFT(N/2)
![ここに画像の説明を入力してください](https://i.stack.imgur.com/5L5TU.png)
注:画像では、MはNと呼んでいるものを指します。
例:
構築し。アルゴリズムに従って、を
といくつかの量子ゲートに変換し。次に、この方法を続けて、を(これは単なるアダマールゲートです)と別のいくつかのゲートに変え
。制御された位相ゲートは表されます。それからを取り除くために別の繰り返しを実行し。これで、より多くの量子ビットで回路を簡単に視覚化できるはずです。さらに、必要なを実行するのに必要なゲートの数は正確であることがわかります。QFT3QFT3QFT2QFT2QFT1RϕQFT2QFTQFTN
∑i=1log(N)i=log(N)(log(N)+1)/2=O(log2N)
ソース:
https://en.wikipedia.org/wiki/Discrete_Fourier_transform
https://en.wikipedia.org/wiki/Quantum_Fourier_transform
量子力学と量子計算MOOC(UC BerkeleyX) - 講義ノート:第5章
PS:この答えは暫定版です。@DaftWillieがコメントで言及しているように、それは「他の可能なアルゴリズムに関して何らかのガイダンスを提供するかもしれない洞察」にはあまり入りません。元の質問に対する代替回答をお勧めします。質問のその側面に答えられるように、私は個人的に少し読んでリソースを掘る必要があります。