Какова сложность (в стандартном целочисленном ОЗУ) вычисления стандартного дискретного преобразования Фурье вектора из целых чисел?
Классический алгоритм для быстрых преобразований Фурье , неуместно [1] приписываемый Кули и Тьюки, обычно описывается как выполняющийся за времени. Но большинство арифметических операций, выполняемых в этом алгоритме, начинаются с сложных х корней единицы, которые (для большинства ) иррациональны, поэтому точная оценка в постоянном времени нецелесообразна. Та же проблема возникает с наивным алгоритмом времени (умножением на матрицу Вандермонда комплексных корней единицы).
Даже не ясно, как точно представить вывод ДПФ (в любой полезной форме). Другими словами, не ясно, что вычислительные ДПФ действительно возможны!
Итак, предположим, что нам нужно только битов точности в каждом выходном значении. Какова сложность вычисления дискретного преобразования Фурье в зависимости от n и b ? (Для конкретности, не стесняйтесь предполагать, что n является степенью 2. )
Или каждый случай «БПФ» в литературе на самом деле означает «быстрое теоретико-числовое преобразование »? [2]
Смотрите мои связанные вопросы о сложности гауссовского исключения и евклидовых кратчайших путей .
[1] Он действительно должен называться (некоторый префикс) алгоритмом Гаусса-Рунге-Кенига-Йейтса-Штумпфа-Даниэльсона-Ланчоса-Кули-Тьюки.
[2] И если да, то почему в большинстве учебников описывается только алгоритм комплексных чисел?
Ответы:
Этот ответ представляет собой вариант анализа первого алгоритма («Метод A») Шёнхаге и Штрассена для умножения длинных целых чисел.
Предположим, что мы хотим вычислить БПФ длинойK=2k . Масштаб ввод таким образом, что все значения меньше 1. Предположим сначала , что мы вычислим с -разрядного фиксированной точкой арифметика ( м бит после двоичной точки). Пусть δ = 2 1m m быть ( "комплекс") единица наименьшего положения. Пустьω=exp(2πi/K).δ=21/2−m ω=exp(2πi/K)
1) Можно вычислить приближения , для которых | ω ′ j - ω j | ≤ ( 2 к - 1ω′j для всех 0 ≤ j ≤ K - 1 . Это можно сделать за время O ( K M ( m ) ), где M ( m ) - время, необходимое для умножения m- битных чисел. (см. Кнут, том 2, 3-е изд., стр. 309).|ω′j−ωj|≤(2k−1)δ 0≤j≤K−1 O(KM(m)) M(m) m
Если стандартное целочисленное ОЗУ означает логарифмическую стоимость, то . Если стандартное целочисленное ОЗУ означает слово ОЗУ, то M ( m ) = OM(m)=O(mlogm) . (Шенхаге и Штрассен показывают в «Методе А», как уменьшить за линейное время умножение m- битных чисел на m умножение O ( log m ) битовых чисел. Последнее можно сделать за единицу стоимости.)M(m)=O(m) m m O(logm)
2) Классическое БПФ Кули-Тьюки вычисляет операции вида . Мы используем m- битную арифметику с фиксированной точкой, эти операции становятся a ′ = t r u n c a t e ( b ′ + ω ′a=b+ωjc m . Если мы знаемb′иc′ сточностью доϵ, мы получаемa′ сточностью до2ϵ+2a′=truncate(b′+ω′jc′) b′ c′ ϵ a′ .2ϵ+2kδ
3) Используя индукцию, легко видеть , что мы получаем окончательный результат с ошибкой . Чтобы получить точность b в конце, m ≥ k + log k + b + O ( 1 ) .(2k−1)⋅2kδ b m≥k+logk+b+O(1)
4) Таким образом, конечное время работы .O(KkM(k+b))
Это также должно работать с числами с плавающей запятой: 1) все еще может быть сделано с арифметикой с фиксированной запятой, 2) также верно для чисел с плавающей запятой.
В арифметике с фиксированной точкой, я думаю, это можно сделать даже быстрее. Сначала мы сводим вычисление БПФ к умножению полиномов с использованием трюка Блюштейна. Длина коэффициентов, необходимых для получения желаемой точности, должна быть . Затем мы сводим умножение многочленов к умножению длинных целых чисел. (Добавьте коэффициенты к длинному числу и разделите их блоками нулевой длины O ( k + b).O(k+b) .) Длина целых чисел O ( K ( k + b ) ) .O(k+b) O(K(k+b))
источник
Это не полный ответ, но я могу указать вам на некоторые соответствующие статьи, а также частично объяснить, почему не так просто извлечь ответ на ваш конкретный вопрос из литературы.
Позвольте мне начать с вопроса, почему вы хотите знать ответ на этот вопрос? Как правило, люди, которым небезразлична проблема такого рода, сталкиваются с фактической реализацией высокопроизводительного БПФ для практического применения. Такие люди меньше заботятся об асимптотической сложности в некоторой идеализированной вычислительной модели, чем о максимизации производительности при определенных аппаратных и программных ограничениях. Например, разработчики самого быстрого преобразования Фурье на Западе пишут в своей статье:
Это те проблемы, которые теоретики обычно не хотят осквернять, но они имеют большое значение в реальных реализациях. Если теоретик заявляет: «Я вычислил абсолютную наилучшую асимптотическую битовую сложность в модели RAM», практикующий может сказать: «Это хорошо», но может найти такой теоретический результат бесполезным для своих целей.
Сказав это, я думаю, что вам лучше всего взглянуть на литературу по численному анализу. Например, Таш и Цойнер внимательно изучили числовую стабильность алгоритма БПФ. Это все еще может быть не совсем то, что вы хотите, потому что общее мнение среди практиков, как представляется, заключается в том, что для достижения определенного количества числовой точности лучший практический подход заключается в предварительно вычислить определенные числа, называемые «коэффициентами твида», с высокой точностью. Если вы делаете только одно БПФ, то это не будет самым быстрым подходом, потому что вы не можете амортизировать стоимость ваших одноразовых предварительных вычислений по большому количеству вычислений БПФ. Тем не менее, их анализ ошибки округления наихудшего случая все еще должен быть актуальным для вашего вопроса.
источник