Ayrık Fourier dönüşümünü hesaplamanın karmaşıklığı?


18

Bir tamsayı vektörünün standart ayrık Fourier dönüşümünü hesaplamanın karmaşıklığı (standart tamsayı RAM üzerinde) nedir?n

Cooley ve Tukey'e uygun olmayan [1] hızlı Fourier dönüşümleri için klasik algoritma genellikle zamanında çalışıyor olarak tanımlanır . Ancak bu algoritmada yürütülen aritmetik işlemlerin çoğu, (çoğu ) irrasyonel olan karmaşık . Birlik kökleri ile başlar , bu nedenle sabit zamanda kesin değerlendirme makul değildir. Aynı sorun, saf -zaman algoritmasıyla da ortaya çıkar (karmaşık birlik köklerinin Vandermonde matrisi ile çarpılması).n n O ( n 2 )O(nlogn)nnO(n2)

DFT'nin çıktısının tam olarak nasıl temsil edileceği bile açık değildir (herhangi bir yararlı formda). Başka bir deyişle, DFT'lerin hesaplanmasının aslında mümkün olduğu açık değildir!

Bu yüzden sadece ihtiyaç varsayalım her çıkış değeri kesinlik bit. ve bir fonksiyonu olarak ayrık Fourier dönüşümünü hesaplamanın karmaşıklığı nedir ? (Somutluk için, gücü olduğunu varsaymaktan çekinmeyin .)n b n 2bnbn2

Yoksa literatürdeki her "FFT" örneği aslında "hızlı sayı-teorik dönüşüm " anlamına mı geliyor? [2]

Gauss eliminasyonunun ve Öklid'in en kısa yollarının karmaşıklığıyla ilgili sorularıma bakın .

[1] Gerçekten Gauss-Runge-König-Yates-Stumpf-Danielson-Lánczos-Cooley-Tukey algoritması olarak adlandırılmalıdır.

[2] Öyleyse, neden çoğu kitap sadece karmaşık sayı algoritmasını açıklıyor?


1
Bence bu onun amacı: teoride hakkında endişelenmenize gerek yok , ama herhangi bir GERÇEK uygulamada bunun ve ortaya çıkabilecek hata hakkında endişelenmeniz gerekiyor. b
Suresh Venkat

1
Aslında bu, her ek hassasiyet bitinin sinyal gücüne eklediği iyi bir sorudur ( çarpın ). Bu yüzden, ara kelime boyutları genişletilebiliyorsa, sorunun en yararlı olacağını düşünüyorum! 23dB2
vs

3
Hesaplanabilir analiz bunu ve ilgili soruları dikkate almıştır. Bu makale , Weirauch'un Tip II etkinliği çerçevesinde Fourier dönüşümünün hesaplanması için bir karmaşıklık üretmektedir. Sınır, (sonsuz, gerçek değerli) girdinin sunumunda doğrusal olmasıdır. Hem giriş hem de çıkış bu sistemde hassas parametreler olarak tanımlanmıştır, bu yüzden bunu RAM modeline çevirmenin bir yolu olabilir.
Aaron Sterling

3
Tamsayının çarpımı konusunda Schönhage ve Strassen'in makalesinde Yöntem A'ya bir göz atın. Sınırlı hassasiyetle karmaşık Fourier dönüşümleri kullanır. Sanırım Knuth Vol. 2.
Markus Bläser

2
Markus, Aaron: Cevaplara dönü?
Suresh Venkat

Yanıtlar:


9

Bu cevap, uzun algoritmaların çarpımı için Schönhage ve Strassen tarafından birinci algoritmanın ("Yöntem A") analizinin bir varyantıdır.

uzunluğunda bir FFT hesaplamak istediğimizi varsayalım . Girişinizi tüm değerler 1'den küçük olacak şekilde ölçeklendirin. Önce m -bit sabit nokta aritmetiği ( ikili noktadan sonra m bit) ile hesapladığımızı varsayalım . Let δ = 2 1 / 2 - m az pozisyonu ( "kompleks") birim. Let ω = exp ( 2 π i / K ) .K=2kmmδ=21/2mω=exp(2πi/K)

1) Bir can hesaplama yaklaşımları öyle ki | ω j - ω j | 0 ( 2 k - 1 ) δ tüm 0 j K - 1 için . Bu süre içinde yapılabilir O ( K M ( m ) ) K ( m ) çarpma için gereken süredir m bitlik sayı. (bkz. Knuth Cilt 2, 3. baskı, sayfa 309).ωj|ωjωj|(2k1)δ0jK1O(KM(m))M(m)m

Standart tamsayı RAM logaritmik maliyet anlamına geliyorsa, . Standart tamsayı RAM kelime RAM'i ifade ediyorsa, M ( m ) = O ( m ) . (Schönhage ve Strassen, "Yöntem A" da m- bit sayılarının O ( log m ) bit sayılarının m çarpımına çarpımının doğrusal zamanda nasıl azaltılacağını gösterir . Sonuncusu birim maliyetlerle yapılabilir.)M(m)=O(mlogm)M(m)=O(m)mmO(logm)

2) Klasik Cooley-Tukey FFT, şeklindeki işlemleri hesaplar . Kullandığımız m bitlik sabit nokta aritmetik, bu Yöneylem haline bir ' = t r u , n C , bir T e ( b ' + ω ' j c ' ) . Bildiğimiz ise b ' ve c ' bir hata kadar £ değerinin , aldığımız bir ' bir hata kadar 2 ε + 2a=b+ωjcma=truncate(b+ωjc)bcϵa .2ϵ+2kδ

3) tümevarım kullanma, biz hata ile nihai sonuç almak görmek kolaydır . Sonunda b hassasiyeti elde etmek için m k + log k + b + O ( 1 ) . (2k1)2kδbmk+logk+b+O(1)

4) Böylece son çalışma süresi .O(KkM(k+b))

Bu ayrıca kayan nokta sayıları ile de çalışmalıdır: 1) sabit nokta aritmetiği ile hala yapılabilir, 2) kayan nokta sayıları için de geçerlidir.


Sabit nokta aritmetiğinde, bence, daha hızlı bile yapılabilir. İlk önce FFT'nin hesaplamasını Bluestein'in hilesini kullanarak polinomların çoğalmasına indiriyoruz. İstenilen hassasiyeti elde etmek için gereken katsayıların uzunluğu . Daha sonra polinomların çoğalmasını uzun tamsayıların çoğalmasına indiriyoruz. (Katsayıları uzun bir sayıya ekleyin ve sıfır O ( k + b ) uzunluğunda bloklarla ayırın .) Tamsayıların uzunluğu O ( K ( k + b ) ) .O(k+b)O(k+b)O(K(k+b))


Bu nedenle (4) noktasından K = n ve b = O (log n) ayarı yapılır ve RAM kelimesinde çalıştığımızı varsayarsak, çalışma süresi elde ederiz . Sağ? O(nlog2n)
Jeffε

Evet. İkinci algoritma bile O ( k + b ) hassasiyetinin yeterli olduğunu varsayarak verir . (Bunun yeterli olmadığına dair hiçbir nokta görmüyorum, ama detayları yapmadım.)O(nlogn)O(k+b)
Markus Bläser

2
BTW, O ( log n ) kadar küçükse , ilk algoritma M ( O ( log n ) ) = 1 olduğundan O ( n log n ) çalışma süresini de verir . bO(logn)O(nlogn)M(O(logn))=1
Markus Bläser

"Algoritmaların Tasarımı ve Analizi" konulu Aho, Hopcroft ve Ullman kitabına baktım ve bit modelindeki algoritmayı ve ilgili konuları ayrıntılı olarak tartışıyorlardı.
Chandra Chekuri

Ama hatırladığım kadarıyla, sadece bit modelindeki "sayı-teorik FFT" yi tartışıyorlar.
Markus Bläser

8

Bu tam bir cevap değil, ancak bazı ilgili makalelere işaret edebilir ve ayrıca belirli bir sorunuza literatürden bir cevabı çıkarmanın neden bu kadar kolay olmadığını kısmen açıklayabilirim.

Sormaya başlayayım, neden bu sorunun cevabını bilmek istiyorsunuz? Tipik olarak, kendilerini bu tür bir konuda önemseyen insanlar, pratik bir uygulama için aslında yüksek performanslı bir FFT uygulamakla karşı karşıya kalan kişilerdir. Bu insanlar, bazı idealize edilmiş hesaplama modellerinde asimptotik karmaşıklığa önem vermekte, özel donanım ve yazılım kısıtlamaları altında performansı en üst düzeye çıkarmaktan daha az önemserler. Örneğin , Batı'daki En Hızlı Fourier Dönüşümü'nün geliştiricileri makalelerinde şöyle yazıyor:

En iyi seçim, kayıt sayısı, gecikme ve talimat verimi, önbelleklerin boyutu ve ilişkilendirilebilirliği, işlemci boru hattının yapısı vb.

Bunlar teorisyenlerin genellikle ellerini kandırmak istemedikleri konulardır, ancak gerçek uygulamalarda büyük önem taşırlar. Bir teorisyen, "RAM modelindeki en iyi asimtotik bit karmaşıklığını anladım" diyorsa, uygulayıcı "Bu güzel" diyebilir, ancak bu teorik sonucu amaçları için işe yaramaz bulabilir.

Bunu söyledikten sonra, en iyi seçeneğinizin sayısal analiz literatürüne bakmak olduğunu düşünüyorum. Örneğin, Tasche ve Zeuner , FFT algoritmasının sayısal kararlılığına yakından baktılar . Bu hala tam olarak istediğiniz gibi olmayabilir, çünkü uygulayıcılar arasındaki genel fikir birliği, belirli bir sayısal hassasiyet elde etmek için en iyi pratik yaklaşım, "twiddle faktörleri" adı verilen belirli sayıları yüksek doğrulukta önceden hesaplamaktır . Sadece bir FFT yapıyorsanız , bu en hızlı yaklaşım olmayacaktır çünkü çok sayıda FFT hesaplaması üzerinden bir kerelik ön hesaplamanızın maliyetini amorti edemezsiniz. Yine de, en kötü durum yuvarlama hatasını analiz etmeleri yine de sorunuzla alakalı olmalıdır.


Bahse girerim ki insanlar , mevcut algoritmalar üzerinde 100 ekstra çarpma yaparak 1024 nokta FFT (WLAN'larda OFDM) yapıp yapamayacaklarını söyleyerek ekstra bit hassasiyetini sıkıştırabileceklerini bilmek isteyeceklerdir . 11024100
vs

1
Tamamen teorik bir soru olarak, doğru ve dürüst bursla ilgileniyorum. Okumak oldukça yaygındır ve burada başka bir şekilde tamamen birleştirici bir algoritmanın ortasında herkesin O (n log n) zamanında çalıştığını bildiği bir FFT kullanıyoruz, aksi takdirde işaretçi geçişleri ve O (log n ) -bit tamsayı aritmetiği. Aslında, tamsayı konveksiyonu, FFT'nin hafif bir varyantı kullanılarak O (n log n) zamanında gerçekleştirilebiliyorsa, bu belki affedilebilir ama yine de özensizdir. Değilse, algoritmayı uygulamaya çalışan kötü bir schmuck THE WRONG CEVAP alacaktır.
Jeffε

Ve elbette, sorumun cevabının pratikte herhangi bir etkisi olmasını beklemiyorum.
Jeffε

2
Jeff, dürüst burs söz konusu olduğunda, FFT'nin O (n log n) ring operasyonları gerektirdiğini söylemek yeterli değil mi? FFT algoritmasının karmaşıklığını ölçmenin doğal yolu budur. Her şeyi belirli bir hesaplama modeline dönüştürme motivasyonunu görmüyorum. Kesinlik parçalarının sayısını izlemenin önemli olduğunu kanıtlamaya çalıştığınız bazı teoremler var mı? Zavallı schmuck'ınıza gelince, onun "yanlış cevabı" alacağını bilmiyorum. Herhangi bir gerçek uygulamada, burada sorduğunuz sorunun baskın endişe olması pek olası değildir.
Timothy Chow

Tim: Elbette, FFT'yi tek başına analiz ediyorsanız zil işlemlerini söylemek yeterli . Ancak FFT, daha büyük bir algoritmanın sadece bir bileşeniyse, daha büyük algoritmanın çalışma süresini bildirmek, FFT de dahil olmak üzere tüm bileşen alt programları için tutarlı bir hesaplama modeli gerektirir. Örneğin, "iki tamsayı diziyi Cooley-Tukey FFT algoritmasını kullanarak döndürün ve sonra elde edilen katsayıları bir karma tablosuna yerleştirin" (tamamen sahte bir örnek oluşturmak için) sorun istiyor. O(nlogn)
Jeffε
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.