Kompleksitas menghitung transformasi Fourier diskrit?

18

Apa kompleksitas (pada RAM bilangan bulat standar) komputasi standar diskrit Fourier transform dari vektor bilangan bulat?n

Algoritma klasik untuk transformasi Fourier cepat , yang tidak tepat [1] dikaitkan dengan Cooley dan Tukey, biasanya digambarkan sebagai berjalan dalam waktu . Tapi sebagian besar operasi aritmatika dieksekusi dalam algoritma ini mulai dengan kompleks th akar kesatuan, yang (untuk sebagian besar ) tidak rasional, evaluasi sehingga tepat dalam waktu yang konstan tidak masuk akal. Masalah yang sama muncul dengan algoritma waktu -naif (dikalikan dengan matriks Vandermonde dari akar kompleks persatuan).n n O ( n 2 )O(nlogn)nnO(n2)

Bahkan tidak jelas bagaimana merepresentasikan output DFT dengan tepat (dalam bentuk apa pun yang bermanfaat). Dengan kata lain, tidak jelas bahwa komputasi DFT sebenarnya mungkin!

Jadi anggaplah kita hanya membutuhkan bit presisi di setiap nilai output. Apa kompleksitas menghitung transformasi Fourier diskrit, sebagai fungsi dari dan ? (Untuk konkret, jangan ragu untuk menganggap adalah kekuatan )n b n 2bnbn2

Atau apakah setiap contoh "FFT" dalam literatur sebenarnya berarti " transformasi bilangan- cepat "? [2]

Lihat pertanyaan terkait saya tentang kompleksitas eliminasi Gaussian dan jalur terpendek Euclidean .

[1] Ini harus benar-benar disebut (beberapa awalan) algoritma Gauss-Runge-König-Yates-Stumpf-Danielson-Lánczos-Cooley-Tukey.

[2] Dan jika demikian, mengapa sebagian besar buku teks hanya menggambarkan algoritma bilangan kompleks?

Jeffε
sumber
1
Saya pikir itu intinya: dalam teori Anda tidak perlu khawatir tentang , tetapi dalam implementasi AKTUAL Anda harus khawatir tentang hal itu dan kesalahan yang mungkin terjadi. b
Suresh Venkat
1
Sebenarnya ini adalah pertanyaan yang bagus setiap tambahan bit presisi menambah pada kekuatan sinyal (kalikan dengan 2 ). Jadi saya pikir pertanyaannya akan sangat berguna jika ukuran kata perantara dapat diperluas! 3dB2
vs
3
Analisis yang dapat dikomputasi telah mempertimbangkan hal ini, dan pertanyaan terkait. Makalah ini menghasilkan kompleksitas terikat untuk perhitungan transformasi Fourier dalam kerangka efektivitas Tipe II Weirauch. Batasannya adalah linear dalam presentasi input (tak terbatas, bernilai nyata). Baik input maupun output didefinisikan sebagai parameter presisi wrt dalam sistem ini, jadi mungkin ada cara untuk menerjemahkannya ke dalam model RAM.
Aaron Sterling
3
Lihat Metode A dalam makalah Schönhage dan Strassen tentang perkalian bilangan bulat. Ia menggunakan transformasi Fourier yang kompleks dengan presisi terbatas. Saya pikir, ini juga dijelaskan dalam Knuth Vol. 2.
Markus Bläser
2
Markus, Aaron: masuk agama ke jawaban?
Suresh Venkat

Jawaban:

9

Jawaban ini adalah varian dari analisis algoritma pertama ("Methode A") oleh Schonhage dan Strassen untuk perkalian bilangan bulat panjang.

Asumsikan kita ingin menghitung FFT dengan panjang . Skala masukan Anda sehingga semua nilai-nilai yang lebih kecil dari 1. Mari kita asumsikan bahwa kita menghitung dengan m -bit titik tetap aritmatika ( m bit setelah titik biner). Mari δ = 2 1 / 2 - m menjadi ( "kompleks") unit posisi paling. Biarkan ω = exp ( 2 π i / K ) .K=2kmmδ=21/2mω=exp(2πi/K)

1) Seseorang dapat menghitung perkiraan sedemikian rupa sehingga | ω j - ω j | ( 2 k - 1 ) δ untuk semua 0 j K - 1 . Ini dapat dilakukan dalam waktu O ( K M ( m ) ) di mana M ( m ) adalah waktu yang diperlukan untuk mengalikan angka m- bit. (lihat Knuth Vol. 2, ed. 3, halaman 309).ωj|ωjωj|(2k1)δ0jK1O(KM(m))M(m)m

Jika standar integer RAM berarti biaya logaritmik, maka . Jika standar integer RAM berarti RAM kata, maka M ( m ) = O ( m ) . (Schönhage dan Strassen menunjukkan dalam "Methode A" bagaimana mengurangi waktu linier penggandaan angka m- bit ke m penggandaan angka bit O ( log m ) . Yang terakhir dapat dilakukan dengan biaya satuan.)M(m)=O(mlogm)M(m)=O(m)mmO(logm)

2) FFT Cooley-Tukey klasik menghitung operasi dari bentuk . Kami menggunakan m -bit titik tetap aritmatika, opertions ini menjadi sebuah ' = t r u n c a t e ( b ' + ω ' j c ' ) . Jika kita tahu b ' dan c ' sampai kesalahan dari ε , kita mendapatkan sebuah ' hingga kesalahan dari 2 ε + 2a=b+ωjcma=truncate(b+ωjc)bcϵa .2ϵ+2kδ

3) Menggunakan induksi, mudah untuk melihat bahwa kita mendapatkan hasil akhir dengan kesalahan . Untuk mendapatkan ketelitian b pada akhirnya, m k + log k + b + O ( 1 ) . (2k1)2kδbmk+logk+b+O(1)

4) Jadi waktu berjalan terakhir adalah .O(KkM(k+b))

Ini juga harus bekerja dengan angka floating point: 1) masih dapat dilakukan dengan aritmatika titik tetap, 2) juga berlaku untuk angka floating point.


Dalam aritmatika titik tetap, saya pikir, itu bahkan dapat dilakukan lebih cepat. Pertama-tama kita mengurangi perhitungan FFT menjadi penggandaan polinomial menggunakan trik Bluestein. Panjang koefisien yang dibutuhkan untuk mendapatkan ketelitian yang diinginkan adalah . Kemudian kita mengurangi multiplikasi polinomial menjadi multiplikasi bilangan bulat panjang. (Tambahkan koefisien ke angka panjang dan pisahkan dengan blok nol panjang O ( k + b ) .) Panjang bilangan bulat adalah O ( K ( k + b ) ) .O(k+b)O(k+b)O(K(k+b))

Markus Bläser
sumber
O(nlog2n)
O(nlogn)O(k+b)
2
bO(logn)O(nlogn)M(O(logn))=1
Saya kebetulan melihat buku Aho, Hopcroft dan Ullman pada "Desain dan Analisis Algoritma" dan mereka membahas algoritma dalam model bit dan masalah terkait secara rinci.
Chandra Chekuri
Tetapi sejauh yang saya ingat, mereka hanya membahas "number-theoretic FFT" dalam bit-model.
Markus Bläser
8

Ini bukan jawaban yang lengkap, tetapi saya dapat mengarahkan Anda ke beberapa makalah yang relevan dan juga menjelaskan mengapa tidak mudah untuk mengekstrak jawaban atas pertanyaan spesifik Anda dari literatur.

Mari saya mulai dengan bertanya, mengapa Anda ingin tahu jawaban untuk pertanyaan ini? Biasanya, orang-orang yang peduli dengan masalah semacam ini adalah mereka yang dihadapkan dengan penerapan FFT kinerja tinggi untuk aplikasi praktis. Orang-orang seperti itu kurang peduli tentang kompleksitas asimptotik dalam beberapa model komputasi ideal daripada tentang memaksimalkan kinerja di bawah kendala perangkat keras dan perangkat lunak tertentu. Misalnya, pengembang Transformasi Fourier Tercepat di Barat menulis di makalah mereka:

Pilihan terbaik tergantung pada perincian perangkat keras seperti jumlah register, latensi dan throughput instruksi, ukuran dan asosiasi cache, struktur dari pipa prosesor, dll.

Ini adalah masalah yang biasanya tidak ingin dikuasai oleh para ahli teori, tetapi mereka sangat penting dalam implementasi aktual. Jika seorang ahli teori menyatakan, "Saya sudah menemukan kompleksitas bit asimptotik absolut terbaik dalam model RAM," praktisi mungkin berkata, "Itu bagus," tetapi mungkin menemukan hasil teoritis seperti itu tidak berguna untuk tujuannya.

Karena itu, saya berpikir bahwa taruhan terbaik Anda adalah dengan melihat literatur analisis numerik. Sebagai contoh, Tasche dan Zeuner telah mencermati stabilitas numerik dari algoritma FFT. Ini mungkin masih belum persis seperti yang Anda inginkan, karena konsensus umum di antara para praktisi tampaknya adalah untuk mencapai jumlah presisi numerik tertentu, pendekatan praktis terbaik adalah dengan menghitung angka-angka tertentu yang disebut "faktor-faktor ganda" dengan akurasi tinggi. Jika Anda hanya melakukan satu FFT, maka ini tidak akan menjadi pendekatan tercepat karena Anda tidak bisa mengamortisasi biaya perhitungan satu kali Anda atas sejumlah besar perhitungan FFT. Namun, analisis mereka tentang kesalahan pembulatan kasus terburuk masih harus relevan dengan pertanyaan Anda.

Timothy Chow
sumber
11024100
1
Saya tertarik sebagai pertanyaan yang murni teoretis, demi kepentingan beasiswa yang benar dan jujur. Sangat umum untuk membaca "dan di sini kita menggunakan FFT, yang seperti semua orang tahu berjalan dalam waktu O (n log n)" di tengah-tengah algoritma kombinatorial murni, jika tidak dianalisis dalam hal pointer pointer dan O (log n ) -bit integer aritmatika. Jika, pada kenyataannya, konvolusi integer dapat dilakukan dalam waktu O (n log n) menggunakan sedikit varian FFT, ini mungkin dimaafkan tetapi masih ceroboh. Jika tidak, orang bodoh yang mencoba menerapkan algoritme akan mendapatkan JAWABAN SALAH.
Jeffε
Dan tentu saja, saya tidak mengharapkan jawaban atas pertanyaan saya memiliki dampak apa pun dalam praktik apa pun.
Jeffε
2
Jeff, sejauh menyangkut beasiswa jujur, bukankah cukup dengan mengatakan bahwa FFT membutuhkan operasi cincin O (n log n)? Itu adalah cara alami untuk mengukur kompleksitas algoritma FFT. Saya tidak melihat motivasi untuk mengubah segalanya menjadi satu model perhitungan tertentu. Apakah ada teorema yang Anda coba buktikan di mana penting untuk melacak jumlah bit presisi? Adapun bodoh Anda, saya tidak membeli bahwa dia akan mendapatkan "jawaban yang salah." Dalam implementasi aktual apa pun, pertanyaan yang Anda ajukan di sini sangat tidak mungkin menjadi perhatian dominan.
Timothy Chow
O(nlogn)