Складність обчислення дискретного перетворення Фур'є?


18

Яка складність (на стандартній цілочисленній ОЗУ) обчислення стандартного дискретного перетворення Фур'є вектора з n цілих чисел?

Класичний алгоритм швидких перетворень Фур'є , невідповідно [1] приписуваний Кулі та Тукі, зазвичай описується як запущений в O(nlogn) час. Але більшість арифметичних операцій, виконаних у цьому алгоритмі, починаються зі складних n х коренів єдності, які є (для більшості n ) ірраціональними, тому точне оцінювання в постійному часі не є розумним. Це ж питання виникає з алгоритмом наївного часу O(n2) (множення на матрицю Вандермонде на складні корені єдності).

Навіть не зрозуміло, як точно представити вихід DFT (у будь-якій корисній формі). Іншими словами, незрозуміло, що обчислення DFT насправді можливо!

Тому припустимо , нам потрібно тільки b біт точності в кожній вихідної величини. У чому полягає складність обчислення дискретного перетворення Фур'є як функції і ? nb (Для конкретності не соромтеся вважати, що - сила 2. )n2

Або кожен приклад "FFT" в літературі насправді означає "швидке число-теоретичне перетворення "? [2]

Дивіться мої пов'язані питання щодо складності ліквідації Гаусса та найкоротших евклідових шляхів .

[1] Справді слід назвати алгоритм Гаусса-Рунге-Кеніга-Йейта-Штумпфа-Даніельсона-Ланчоса-Кулі-Тукі.

[2] І якщо так, то чому більшість підручників описують лише алгоритм складних чисел?


1
Я думаю, що це його суть: теоретично вам не потрібно турбуватися про , але в будь-якій АКТУАЛЬНІЙ ВПРОВАДЖЕННІ ви повинні турбуватися про це та помилку, яка може виникнути. b
Суреш Венкат

1
Насправді це гарне запитання, кожен додатковий біт точності додає до сили сигналу (помножте на 2 ). Тому я думаю, що питання буде найбільш корисним, якщо розміри слів-посередників можна буде розширити! 3dB2
проти

3
Цей обчислювальний аналіз врахував і пов'язані з цим питання. У цьому документі виробляється комплекс складності для обчислення перетворення Фур'є в рамках ефективності типу II Вайрауха. Пов’язано з тим, що воно є лінійним у поданні (нескінченного, реального значення) вводу. І вхід, і вихід визначаються параметрами точності wrt в цій системі, тому може бути спосіб перевести це в модель оперативної пам'яті.
Аарон Стерлінг

3
Погляньте на метод А у статті Шенхаге та Страссена про ціле множення. Він використовує складні перетворення Фур'є з обмеженою точністю. Я думаю, це також описано у Knuth Vol. 2.
Маркус Блазер

2
Маркус, Аарон: конвертувати у відповіді?
Суреш Венкат

Відповіді:


9

Ця відповідь є варіантом аналізу першого алгоритму («Метод А») Шенгаге та Штрассена для множення довгих цілих чисел.

Припустимо, ми хочемо обчислити FFT довжиною . Масштабуйте свій вхід таким чином, щоб усі значення були меншими за 1. Спочатку припустимо, що ми обчислюємо m- бітну арифметику з фіксованою точкою ( m біт після двійкової точки). Нехай δ = 2 1 / 2 - м бути ( "комплекс") одиниця найменшого положення. Нехай ω = exp ( 2 π i / K ) .K=2kmmδ=21/2mω=exp(2πi/K)

1) Можна обчислити наближення таким, що | ω j - ω j | ( 2 k - 1 ) δ для всіх 0 j K - 1 . Це можна зробити за час O ( K M ( m ) ), де M ( m ) - час, необхідний для множення m- бітних чисел. (див. Кнут т. 2, 3-е видання, стор. 309).ωj|ωjωj|(2k1)δ0jK1O(KM(m))M(m)m

Якщо стандартна ціла оперативна пам'ять означає логарифмічну вартість, то . Якщо стандартна ціла ОЗП означає слово ОЗУ, то M ( m ) = O ( m ) . (Шенхаге та Страссен показують у "Методі А", як зменшити в лінійний час множення m- бітових чисел на m множення бітних чисел O ( log m ) . Останнє можна зробити за одиницю витрат.)M(m)=O(mlogm)M(m)=O(m)mmO(logm)

2) Класичний Cooley-Tukey FFT обчислює операції виду . Ми використовуємо m- бітну арифметику з фіксованою точкою, ці операції стають a ' = t r u n c a t e ( b ' + ω j c ' ) . Якщо ми знаємо , Ь ' і C ' до помилки е , ми отримуємо ' до помилки 2 ε + 2a=b+ωjcma=truncate(b+ωjc)bcϵa .2ϵ+2kδ

3) За допомогою індукції легко побачити, що ми отримуємо кінцевий результат з помилкою . Для отримання точності b врешті-решт, m k + log k + b + O ( 1 ) . (2k1)2kδbmk+logk+b+O(1)

4) Таким чином, кінцевим часом роботи є .O(KkM(k+b))

Це також повинно працювати з числами з плаваючою комою: 1) все ще можна робити з арифметикою з фіксованою точкою, 2) також справедливо для чисел з плаваючою комою.


В умовах арифметики з фіксованою точкою, я думаю, це навіть можна зробити швидше. Спочатку ми зводимо обчислення FFT до множення многочленів за допомогою трюку Блюстейна. Довжина коефіцієнтів, необхідних для отримання бажаної точності, повинна бути . Тоді ми зводимо множення многочленів на множення довгих цілих чисел. (Додайте коефіцієнти до довгого числа і розділіть їх на блоки нуля довжини O ( k + b ) . Довжина цілих чисел дорівнює O ( K ( k + b ) ) .O(k+b)O(k+b)O(K(k+b))


Отже, з точки (4), встановивши K = n і b = O (log n), і припускаючи, що ми працюємо на слові RAM, ми отримуємо час роботи . Правильно? O(nlog2n)
Jeffε

Так. Другий алгоритм навіть дає , припускаючи, що точність O ( k + b ) достатня. (Я не бачу жодного сенсу, чому цього недостатньо, але деталей я не робив.)O(nlogn)O(k+b)
Markus Bläser

2
BTW, якщо такий як O ( log n ) , то також перший алгоритм дає час виконання O ( n log n ), оскільки M ( O ( log n ) ) = 1 . bO(logn)O(nlogn)M(O(logn))=1
Markus Bläser

Мені траплялося переглядати книгу Ахо, Хопкрофта та Уллмана "Дизайн та аналіз алгоритмів", і вони детально обговорювали алгоритм у бітовій моделі та пов'язані з цим питання.
Чандра Чекурі

Але наскільки я пам’ятаю, вони обговорюють лише «теоретико-числовий FFT» у біт-моделі.
Маркус Блазер

8

Це не повна відповідь, але я можу вказати на деякі відповідні документи, а також частково пояснити, чому не так просто витягнути відповідь на своє конкретне питання з літератури.

Дозвольте почати із запитання: чому ви хочете знати відповідь на це питання? Зазвичай люди, які виявляють турботу про подібні проблеми, - це ті, хто стикається з реальною реалізацією високоефективної FFT для практичного застосування. У деяких ідеалізованих обчислювальних моделях такі люди менше піклуються про асимптотичну складність, ніж про досягнення максимальної продуктивності при їх конкретних апаратних та програмних обмеженнях. Наприклад, розробники " Найшвидшого перетворення Фур'є на Заході" пишуть у своєму документі:

Найкращий вибір залежить від апаратних деталей, таких як кількість регістрів, затримка та пропускна здатність інструкцій, розмір та асоціативність кешів, структура трубопроводу процесора тощо.

Це питання, які теоретики, як правило, не хочуть кинути на руки, але вони мають велике значення в реальних реалізаціях. Якщо теоретик заявляє: "Я визначив абсолютну найкращу асимптотичну бітову складність в моделі оперативної пам'яті", практик може сказати: "Це добре", але може вважати такий теоретичний результат марним для своїх цілей.

Сказавши це, я вважаю, що найкраще поглянути на літературу з числового аналізу. Наприклад, Tasche і Zeuner уважно ознайомилися з числовою стійкістю алгоритму FFT. Це все ще може бути не саме тим, що ви хочете, тому що загальний консенсус серед практикуючих видається таким, що для досягнення заданої кількості числової точності найкращим практичним підходом є попереднє обчислення певних чисел, званих "коефіцієнтами подвійності", до високої точності. Якщо ви робите лише один FFT, це не буде найшвидшим підходом, оскільки вам не вдасться амортизувати вартість свого одноразового попереднього обчислення за велику кількість обчислень FFT. Тим не менш, їх аналіз найгіршої помилки заокруглення все ще повинен відповідати вашому питанню.


11024100

1
Мене цікавить суто теоретичне питання, в інтересах правильної та чесної науковості. Досить поширеним є читання "і тут ми використовуємо FFT, який, як всі знають, працює в O (n log n) час" посеред інакше чисто комбінаторного алгоритму, інакше проаналізованого з точки зору обходу покажчиків та O (log n ) -бітна ціла арифметика. Якщо насправді згортання цілих чисел можна здійснити за O (n log n) час, використовуючи незначний варіант FFT, це, можливо, прощається, але все-таки неохайно. Якщо ні, будь-який бідний чморк, який намагається реалізувати алгоритм, отримає ВІДПОВІДНИЙ ВІДПОВІДЬ.
Jeffε

І звичайно, я не очікую, що відповідь на моє запитання матиме вплив на практиці.
Jeffε

2
Джефф, що стосується чесної стипендії, чи не достатньо сказати, що для FFT потрібні кільцеві операції O (n log n)? Це природний спосіб вимірювання складності алгоритму FFT. Я не бачу мотивації перетворення всього в одну конкретну модель обчислення. Чи є якась теорема, яку ви намагаєтесь довести, де важливо відстежувати кількість біт точності? Щодо твого бідного чмока, я не вважаю, що він отримає "неправильну відповідь". У будь-якому фактичному здійсненні питання, яке ви задаєте тут, навряд чи буде домінуючим.
Тімоті Чоу

O(nlogn)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.