<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=188.243.128.31&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=188.243.128.31&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/188.243.128.31"/>
		<updated>2026-06-11T14:15:00Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D1%8F%D1%89%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F&amp;diff=61614</id>
		<title>Производящая функция</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D1%8F%D1%89%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F&amp;diff=61614"/>
				<updated>2017-06-14T17:35:02Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение &lt;br /&gt;
|definition=&lt;br /&gt;
'''Производящая функция''' (англ. ''generating function'') — это формальный степенной ряд:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=\sum\limits_{n=0}^\infty a_n z^n&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
порождающий(производящий) последовательность &amp;lt;tex&amp;gt;(a_0, a_1, a_2, \ldots)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
Метод производящих функций был разработан Эйлером в 1750-х годах.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
Производящая функция используется для:&lt;br /&gt;
&lt;br /&gt;
* Компактной записи информации о последовательности.&lt;br /&gt;
* Нахождения зависимости &amp;lt;tex&amp;gt;a_n(n)&amp;lt;/tex&amp;gt; для последовательности &amp;lt;tex&amp;gt;a_n&amp;lt;/tex&amp;gt;, заданной рекуррентным соотношением. Например, для чисел Фибоначчи.&lt;br /&gt;
* Нахождения рекуррентного соотношения для последовательности {{---}} вид производящей функции может помочь найти формулу.&lt;br /&gt;
* Исследования асимптотического поведения последовательности.&lt;br /&gt;
* Доказательства тождеств с последовательностями.&lt;br /&gt;
* Решения задачи подсчета объектов в комбинаторике.Например, в доказательстве[[Нахождение количества разбиений числа на слагаемые|пентагональной теоремы]] или в задаче нахождения количества расстановок &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ладей на доске &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;&amp;amp;nbsp;×&amp;amp;nbsp;&amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Вычисления бесконечных сумм.&lt;br /&gt;
&lt;br /&gt;
== Примеры производящих функций ==&lt;br /&gt;
Рассмотрим производящие функции для различных комбинаторных последовательностей:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\prod\limits_{ n = 1}^\infty(1-x^n)&amp;lt;/tex&amp;gt; {{---}} производящая функция для разности количества разбиений числа &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в четное и нечетное число различных слагаемых.Например коэффициент при &amp;lt;tex&amp;gt;x^5&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;+1&amp;lt;/tex&amp;gt;, потому-что существует два разбиение на четное число различных слагаемых &amp;lt;tex&amp;gt;(4+1; 3+2)&amp;lt;/tex&amp;gt; и одно на нечетное (&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;). Правильность этого легко осознать, если понять, что каждая скобка представляет какое-то слагаемое и мы можем его взять(второе слагаемое {{---}} &amp;lt;tex&amp;gt;-x^k&amp;lt;/tex&amp;gt;) или не взять(первое {{---}} &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;). Эта производящая функция используется в комбинаторном доказательстве пентагональной теоремы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \prod\limits_{n=1}^\infty \dfrac{1}{1-x^n}&amp;lt;/tex&amp;gt; {{---}} производящая функция для последовательности &amp;lt;tex&amp;gt;p_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; {{---}} число разбиений числа &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; на слагаемые.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\prod\limits_{ n = 1}^\infty(1+x^n)&amp;lt;/tex&amp;gt; {{---}} производящая функция для последовательности &amp;lt;tex&amp;gt;d_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;d_i&amp;lt;/tex&amp;gt; {{---}} число разбиений на различные слагаемые.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\prod\limits_{n=1}^\infty(1+x^{ 2n - 1})&amp;lt;/tex&amp;gt; {{---}} производящая функция для последовательности &amp;lt;tex&amp;gt;l_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;l_i&amp;lt;/tex&amp;gt; {{---}} число разбиений на нечётные слагаемые.С помощью метода производящих функций можно доказать, что производящие функции последовательностей равны, соответственно &amp;lt;tex&amp;gt;d_n = l_n &amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\prod\limits_{n=1}^\infty(1+x^{ n})=\prod\limits_{n=1}^\infty \dfrac{1-x^{2n}}{1-x^n}=\dfrac{1-x^2}{1-x}\dfrac{1-x^4}{1-x^2}\dfrac{1-x^6}{1-x^3}\ldots=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=\dfrac{1}{1-x}\dfrac{1}{1-x^3}\dfrac{1}{1-x^5}\ldots=\prod\limits_{n=1}^\infty(1+x^{ 2n - 1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Примеры решений задач методом производящих функций ==&lt;br /&gt;
=== Решение рекуррентных соотношений ===&lt;br /&gt;
Существует целый класс последовательностей, задаваемых рекуррентным соотношением, например, &amp;lt;tex&amp;gt;f_n&amp;lt;/tex&amp;gt; {{---}} числа Фибоначчи или &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; {{---}}&lt;br /&gt;
[[Числа Каталана | числа Каталана]]. Метод производящих функций позволяет получить выражение для &amp;lt;tex&amp;gt;a_n&amp;lt;/tex&amp;gt; через номер элемента в последовательности в замкнутом виде, то есть в таком виде, что выражение можно вычислить, предполагая, что &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; достаточно мало.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пусть последовательность &amp;lt;tex&amp;gt;(a_0, a_1, a_2, \ldots)&amp;lt;/tex&amp;gt; удовлетворяет некоторому рекуррентному соотношению.Мы хотим получить выражение для &amp;lt;tex&amp;gt;a_n&amp;lt;/tex&amp;gt; (при &amp;lt;tex&amp;gt;n \geqslant 0&amp;lt;/tex&amp;gt;) в замкнутом виде.Алгоритм получения замкнутого выражения для чисел &amp;lt;tex&amp;gt;a_n&amp;lt;/tex&amp;gt;, удовлетворяющих рекуррентному соотношению, с помощью производящих функций состоит из 4 шагов:&lt;br /&gt;
&lt;br /&gt;
# Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то есть количество предшествующих элементов, требуемых для вычисления элемента с номером &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;):&lt;br /&gt;
#: &amp;lt;tex&amp;gt;a_0=\ldots,&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt;a_1=\ldots,&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt;a_{k-1}=\ldots,&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt;a_{n}=\ldots, n \geqslant k.&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Домножить каждую строчку на &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; в соответствующей степени и просуммировать строчки для всех &amp;lt;tex&amp;gt;n \geqslant 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# В полученном уравнении привести все суммы к замкнутому виду. Получить уравнение для производящей функции.&lt;br /&gt;
# Выразить &amp;lt;tex&amp;gt;G(z)&amp;lt;/tex&amp;gt; в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для демонстрации универсальности метода рассмотрим довольно произвольное рекуррентное соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_0= 1,&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_1= 2,&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_n= 6a_{ n - 1}-8a_{n-2}+n, n \geqslant 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запишем производящую функцию для этой последовательности и преобразуем правую часть:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=a_0+a_1z+\sum\limits_{n=2}^\infty(6a_{ n - 1}-8a_{n-2}+n) z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=a_0+a_1z+6\sum\limits_{n=2}^\infty a_ { n-1}&lt;br /&gt;
z^n - 8\sum\limits_{n=2}^\infty a_ { n-2}&lt;br /&gt;
z^n+\sum\limits_{n=2}^\infty n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=a_0+a_1z+6z\sum\limits_{n=1}^\infty a_ { n }&lt;br /&gt;
z^n - 8z^2\sum\limits_{n=0}^\infty a_ { n }&lt;br /&gt;
z^n+\sum\limits_{n=2}^\infty n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=a_0+a_1z+6z(G(z)-a_0) - 8z^2G(z)+\sum\limits_{n=2}^\infty n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=1-4z+6zG(z) - 8z^2G(z)+\sum\limits_{n=2}^\infty n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы замкнуть последнюю сумму воспользуемся очень важным приемом, который используется при преобразовании производящих функций. Фактически мы имеем дело с последовательностью &amp;lt;tex&amp;gt;nb_n&amp;lt;/tex&amp;gt; (в нашем случае последовательность &amp;lt;tex&amp;gt;b_n= (1, 1, 1, \ldots)&amp;lt;/tex&amp;gt;). Такая последовательность получается путём дифференцирования функции &amp;lt;tex&amp;gt;B(z)&amp;lt;/tex&amp;gt;, производящей для &amp;lt;tex&amp;gt;b_n&amp;lt;/tex&amp;gt;, с последующим умножением результата на &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;zB'(z)=z(\sum\limits_{n=0}^\infty b_n z^n)'=z\sum\limits_{ n = 1}^\infty nb_n z^{n-1}=\sum\limits_{n=0}^\infty nb_n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Тогда замкнем последнее слагаемое следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{n=2}^\infty n z^n=z \sum\limits_{n=2}^\infty n z^{n-1}= z(\sum\limits_{ n = 2}^\infty z^n)'&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{n=2}^\infty z^n=\sum\limits_{n=0}^\infty z^n-1-z=\dfrac{1}{1-z}-1-z=\dfrac{z^2}{1-z}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;z(\dfrac{ z ^ 2}{1-z})'=\dfrac{z^2(2-z)}{(1-z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом наше последнее слагаемое примет вид:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=1-4z+6zG(z) - 8z^2G(z)+\dfrac{z^2(2-z)}{(1-z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Это уравнение для производящей функции. Из него выражаем &amp;lt;tex&amp;gt;G(z)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=\dfrac{1-6z+11z^2-5z^3}{(1-6z+8z^2)(1-z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Разложим знаменатель на множители и разобьём дробь на сумму простых дробей &amp;lt;ref&amp;gt;[http://www.genfunc.ru/theory/pril04/ О разложении рациональной функции в ряд]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; G(z) =\dfrac{1-6z+11z^2-5z^3}{(1-6z+8z^2)(1-z)^2}=\dfrac{1-6z+11z^2-5z^3}{(1-2z)(1-4z)(1-z)^2}=\dfrac{1/3}{(1-z)^2}+\dfrac{7/9}{1-z}-\dfrac{1/2}{1-2z}+\dfrac{7/18}{1-4z}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разложим первое слагаемое в ряд, используя расширенные биномиальные коэффициенты &amp;lt;ref&amp;gt;[http://www.genfunc.ru/theory/pril02/ Расширенные биномиальные коэффициенты]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\dfrac{ 1}{(1-z)^2}=(1-z)^{-2}=\sum\limits_{n=0}^{\infty} {-2\choose n}(-z)^n=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=\sum\limits_{n=0}^{\infty} (-1)^n{n+1\choose 1}(-z)^n=\sum\limits_{n=0}^{\infty}(n+1)z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=\dfrac{1/3}{(1-z)^2}+\dfrac{7/9}{1-z}-\dfrac{1/2}{1-2z}+\dfrac{7/18}{1-4z}=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=\dfrac{1}{3}\sum\limits_{n=0}^{\infty} (n+1)z^n +\dfrac{7}{9}\sum\limits_{n=0}^{\infty} z^n - \dfrac{1}{2}\sum\limits_{n=0}^{\infty} 2^n z^n + \dfrac{7}{18}\sum\limits_{n=0}^{\infty} 4^n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_n=\dfrac{n+1}{3}+\dfrac{7}{9}-\dfrac{2^n}{2}+\dfrac{7 \cdot 4^n}{18}=\dfrac{7 \cdot 4^n+6n+20}{18}-2^{n-1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Расчет дисперсии геометрического распределения ===&lt;br /&gt;
Метод производящих функций также используется для нахождения [[Дисперсия случайной величины | математического ожидания и дисперсии]] различных распределений в теории вероятностей. Например, в геометрическом распределении &amp;lt;ref&amp;gt;[http://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5 Геометрическое распределение]&amp;lt;/ref&amp;gt; для нахождения дисперсии &amp;lt;tex&amp;gt;\operatorname{D}(\xi)=\operatorname{E}(\xi^2)-(\operatorname{E}(\xi))^2&amp;lt;/tex&amp;gt; нужно найти два мат. ожидания:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\operatorname{E}(\xi)=\sum\limits_{n=1}^{\infty}n p(1-p)^{n-1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\operatorname{E}(\xi^2) = \sum\limits_{n=1}^{\infty}n^{2}p(1-p)^{n-1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
которые фактически являются производящими функциями последовательностей &amp;lt;tex&amp;gt;1, 2, 3\ldots&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;1, 4, 9\ldots&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\operatorname{ E}(\xi)=\sum\limits_{n=1}^{\infty}n p(1-p)^{n-1} = &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= \sum\limits_{n=0}^{\infty}(n+1) p(1-p)^{n} = &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= \sum\limits_{n=0}^{\infty}n p(1-p)^{n} + \sum\limits_{n=1}^{\infty} p(1-p)^{n-1} = &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= (1-p) \operatorname{E}(\xi) +1 \Rightarrow \operatorname{E}(\xi) = \dfrac{1}{p}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\operatorname{E}(\xi^2) = p\sum\limits_{n=1}^{\infty}n^{2}(1-p)^{n-1} =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=p\sum\limits_{n=1}^{\infty}n(n+1)(1-p)^{n-1} - p\sum\limits_{n=1}^{\infty}n(1-p)^{n-1} =&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\dfrac{\operatorname{d}^{2}}{\operatorname{d}p^{2}}\sum\limits_{n=1}^{\infty}(1-p)^{n+1} + p\dfrac{\operatorname{d}}{\operatorname{d}p}\sum\limits_{n=1}^{\infty}(1-p)^{n} =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\dfrac{\operatorname{d}^{2}}{\operatorname{d}p^{2}}\left(\sum\limits_{ n = 0}^{\infty}(1-p)^{n} \cdot(1-p)^2\right) +p\dfrac{\operatorname{d}}{\operatorname{d}p}\left(\sum\limits_{ n = 0}^{\infty}(1-p)^{n}\cdot(1-p)\right) =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\dfrac{\operatorname{d}^{2}}{\operatorname{d}p^{2}}\left(\dfrac{ 1}{1-(1-p)} \cdot(1-p)^2\right) +p\dfrac{\operatorname{d}}{\operatorname{d}p}\left(\dfrac{ 1}{1-(1-p)}\cdot(1-p)\right) =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\dfrac{\operatorname{d}^{2}}{\operatorname{d}p^{2}}\left(\dfrac{ (1 - p) ^ 2}{p}\right) +p\dfrac{\operatorname{d}}{\operatorname{d}p}\left(\dfrac{ 1 - p}{p}\right) =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\cdot\dfrac{2}{p^3} - p\cdot\dfrac{1}{p^2} = \dfrac{2}{p^{2}} - \dfrac{1}{p} = \dfrac{2-p}{p^{2}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\operatorname{D}(\xi)=\operatorname{E}(\xi^2)-(\operatorname{E}(\xi))^2= \dfrac{2-p}{p^{2}}-\dfrac{1}{p^2}=\dfrac{1-p}{p^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример задачи на нахождение производящей функции ===&lt;br /&gt;
{{Задача&lt;br /&gt;
| about = &lt;br /&gt;
| definition = Рассмотрим множество путей на прямой, состоящих из шагов длины &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; вправо и влево. Найдите производящую функцию для числа таких путей из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, начинающихся в &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; и оканчивающихся: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(a)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt;б&amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; и не заходящих в отрицательную полупрямую.&lt;br /&gt;
}}&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;(a)&amp;lt;/tex&amp;gt; Заметим, что для того, чтобы закончить путь в &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; необходимо совершить равное число шагов вправо и влево. Тогда задача сводится к тому, чтобы выбрать &amp;lt;tex&amp;gt;\dfrac{n}{2}&amp;lt;/tex&amp;gt; позиций для, например, шагов вправо из всего &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов. Тогда ответом будет сумма от нуля до бесконечности по &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; всех &amp;lt;tex&amp;gt;C^{n}_{2n}&amp;lt;/tex&amp;gt;. То есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
g(x) = \sum\limits_{0}^{\infty} C^{n}_{2n} x^n&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
Рассмотрим &amp;lt;tex&amp;gt;f(x) = \sum\limits_{0}^{\infty} C_n x^n &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; {{---}} [[Числа Каталана | число Каталана]]. Тогда, заметим что &amp;lt;tex&amp;gt;f'(x) = \sum\limits_{0}^{\infty} n C_n x^{n-1} &amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;C_n = \dfrac{1}{n+1} C_{2n}^n &amp;lt;/tex&amp;gt;, то справедливо равенство:&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
g(x) = (n+1)f(x) = xf'(x) + f(x)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мы знаем, что производящая функция для чисел Каталана равна &amp;lt;tex&amp;gt;f(x) = \dfrac{1-\sqrt{1-4x}}{2x}&amp;lt;/tex&amp;gt;. Найдем &amp;lt;tex&amp;gt;f'(x)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
f'(x) = \dfrac{\dfrac{4x}{\sqrt{1-4x}} - 2 + 2\sqrt{1-4x}}{4x^2} = \dfrac{1 - 2x - \sqrt{1-4x}}{2x^2 \sqrt{1-4x}}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, ответом будет производящая функция вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
g(x) = \dfrac{1 - 2x - \sqrt{1-4x}}{2x \sqrt{1-4x}} + \dfrac{1-\sqrt{1-4x}}{2x}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(б) Заметим, что задача аналогична [[Правильные скобочные последовательности | Правильной скобочной последовательности]]. Тогда производящей функцией для нашей задачи будет производящая функция для правильной скобочной последовательности, а именно:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
g(x) = \dfrac{1-\sqrt{1-4x}}{2x}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
=== Примеры простых производящих функций ===&lt;br /&gt;
На последнем шаге приведения производящей функции к замкнутому виду требуется разложить полученные слагаемые в ряд. Для этого можно воспользоваться таблицей основных производящих функций &amp;lt;ref&amp;gt;[http://www.genfunc.ru/theory/pril03/ Таблица производящих функций]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Все суммы выполняются по переменной &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;\infty&amp;lt;/tex&amp;gt;. Элементы последовательности нумеруются от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:30cm&amp;quot; border=1&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#EEEEFF&lt;br /&gt;
| '''Последовательность''' || '''Производящая функция в виде ряда''' || '''Производящая функция в замкнутом виде'''&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 0, 0,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(0, 0, \ldots, 0, 1, 0, 0\ldots)&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; нулей в начале) || &amp;lt;tex&amp;gt;z^m&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;z^m&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 1, 1,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{1-z}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 0, 0, \ldots, 0, 1, 0, 0, \ldots 0, 1, 0, 0\ldots)&amp;lt;/tex&amp;gt; (повторяется через &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;) || &amp;lt;tex&amp;gt;\sum\limits z^{nm}&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{1-z^m}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, -1, 1, -1,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits (-1)^nz^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{1+z}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 2, 3, 4,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits (n+1)z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 2, 4, 8, 16,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits 2^nz^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-2z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, r, r^2, r^3,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits r^nz^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-rz)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;{m\choose 0}, {m\choose 1}, {m\choose 2}, {m\choose 3},\ldots&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits {m\choose n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;(1+z)^m&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;1, {{m}\choose m}, {{m+1}\choose m}, {{m+2}\choose m},\ldots&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits {{m+n-1}\choose n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-z)^m}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;1, {{m+1}\choose m}, {{m+2}\choose m}, {{m+3}\choose m},\ldots&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits {{m+n}\choose n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-z)^{m+1}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(0, 1, -\dfrac{1}{2}, \dfrac{1}{3}, -\dfrac{1}{4},\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits \dfrac{(-1)^{n+1}}{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\ln(1+z)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 1, \dfrac{1}{2}, \dfrac{1}{6}, \dfrac{1}{24},\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits \dfrac{1}{n!}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;e^z&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, -\dfrac{1}{2!}m^2, \dfrac{1}{4!}m^4, -\dfrac{1}{6!}m^6, \dfrac{1}{8!}m^8,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits \dfrac{1}{(2n)!}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;m^{(2n)}&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\cos m&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(m, -\dfrac{1}{3!}m^3, \dfrac{1}{5!}m^5, -\dfrac{1}{7!}m^7, \dfrac{1}{9!}m^9,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits \dfrac{1}{(2n-1)!}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;m^{(2n-1)}&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sin m&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации == &lt;br /&gt;
* [http://kvant.mirror1.mccme.ru/1988/11/razbienie_chisel.htm Вайнштейн Ф., Разбиение чисел. Журнал &amp;quot;Квант&amp;quot; № 11, 1988 год]&lt;br /&gt;
* [http://www.genfunc.ru/ Производящие функции]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Generating_function Wikipedia {{---}} Generating function]&lt;br /&gt;
* [[Нахождение количества разбиений числа на слагаемые|Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]]&lt;br /&gt;
* Graham, Knuth, and Patashnik: Concrete Mathematics&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Комбинаторика]]&lt;br /&gt;
[[Категория: Подсчёт числа объектов]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D1%8F%D1%89%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F&amp;diff=61508</id>
		<title>Производящая функция</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D1%8F%D1%89%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F&amp;diff=61508"/>
				<updated>2017-06-13T20:01:35Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение &lt;br /&gt;
|definition=&lt;br /&gt;
'''Производящая функция''' (англ. ''generating function'') — это формальный степенной ряд:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=\sum\limits_{n=0}^\infty a_n z^n&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
порождающий(производящий) последовательность &amp;lt;tex&amp;gt;(a_0, a_1, a_2, \ldots)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
Метод производящих функций был разработан Эйлером в 1750-х годах.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
Производящая функция используется для:&lt;br /&gt;
&lt;br /&gt;
* Компактной записи информации о последовательности.&lt;br /&gt;
* Нахождения зависимости &amp;lt;tex&amp;gt;a_n(n)&amp;lt;/tex&amp;gt; для последовательности &amp;lt;tex&amp;gt;a_n&amp;lt;/tex&amp;gt;, заданной рекуррентным соотношением. Например, для чисел Фибоначчи.&lt;br /&gt;
* Нахождения рекуррентного соотношения для последовательности {{---}} вид производящей функции может помочь найти формулу.&lt;br /&gt;
* Исследования асимптотического поведения последовательности.&lt;br /&gt;
* Доказательства тождеств с последовательностями.&lt;br /&gt;
* Решения задачи подсчета объектов в комбинаторике.Например, в доказательстве[[Нахождение количества разбиений числа на слагаемые|пентагональной теоремы]] или в задаче нахождения количества расстановок &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ладей на доске &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;&amp;amp;nbsp;×&amp;amp;nbsp;&amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Вычисления бесконечных сумм.&lt;br /&gt;
&lt;br /&gt;
== Примеры производящих функций ==&lt;br /&gt;
Рассмотрим производящие функции для различных комбинаторных последовательностей:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\prod\limits_{ n = 1}^\infty(1-x^n)&amp;lt;/tex&amp;gt; {{---}} производящая функция для разности количества разбиений числа &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в четное и нечетное число различных слагаемых.Например коэффициент при &amp;lt;tex&amp;gt;x^5&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;+1&amp;lt;/tex&amp;gt;, потому-что существует два разбиение на четное число различных слагаемых &amp;lt;tex&amp;gt;(4+1; 3+2)&amp;lt;/tex&amp;gt; и одно на нечетное (&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;). Правильность этого легко осознать, если понять, что каждая скобка представляет какое-то слагаемое и мы можем его взять(второе слагаемое {{---}} &amp;lt;tex&amp;gt;-x^k&amp;lt;/tex&amp;gt;) или не взять(первое {{---}} &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;). Эта производящая функция используется в комбинаторном доказательстве пентагональной теоремы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \prod\limits_{n=1}^\infty \dfrac{1}{1-x^n}&amp;lt;/tex&amp;gt; {{---}} производящая функция для последовательности &amp;lt;tex&amp;gt;p_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; {{---}} число разбиений числа &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; на слагаемые.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\prod\limits_{ n = 1}^\infty(1+x^n)&amp;lt;/tex&amp;gt; {{---}} производящая функция для последовательности &amp;lt;tex&amp;gt;d_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;d_i&amp;lt;/tex&amp;gt; {{---}} число разбиений на различные слагаемые.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\prod\limits_{n=1}^\infty(1+x^{ 2n - 1})&amp;lt;/tex&amp;gt; {{---}} производящая функция для последовательности &amp;lt;tex&amp;gt;l_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;l_i&amp;lt;/tex&amp;gt; {{---}} число разбиений на нечётные слагаемые.С помощью метода производящих функций можно доказать, что производящие функции последовательностей равны, соответственно &amp;lt;tex&amp;gt;d_n = l_n &amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\prod\limits_{n=1}^\infty(1+x^{ n})=\prod\limits_{n=1}^\infty \dfrac{1-x^{2n}}{1-x^n}=\dfrac{1-x^2}{1-x}\dfrac{1-x^4}{1-x^2}\dfrac{1-x^6}{1-x^3}\ldots=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=\dfrac{1}{1-x}\dfrac{1}{1-x^3}\dfrac{1}{1-x^5}\ldots=\prod\limits_{n=1}^\infty(1+x^{ 2n - 1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Примеры решений задач методом производящих функций ==&lt;br /&gt;
=== Решение рекуррентных соотношений ===&lt;br /&gt;
Существует целый класс последовательностей, задаваемых рекуррентным соотношением, например, &amp;lt;tex&amp;gt;f_n&amp;lt;/tex&amp;gt; {{---}} числа Фибоначчи или &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; {{---}}&lt;br /&gt;
[[Числа Каталана | числа Каталана]]. Метод производящих функций позволяет получить выражение для &amp;lt;tex&amp;gt;a_n&amp;lt;/tex&amp;gt; через номер элемента в последовательности в замкнутом виде, то есть в таком виде, что выражение можно вычислить, предполагая, что &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; достаточно мало.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пусть последовательность &amp;lt;tex&amp;gt;(a_0, a_1, a_2, \ldots)&amp;lt;/tex&amp;gt; удовлетворяет некоторому рекуррентному соотношению.Мы хотим получить выражение для &amp;lt;tex&amp;gt;a_n&amp;lt;/tex&amp;gt; (при &amp;lt;tex&amp;gt;n \geqslant 0&amp;lt;/tex&amp;gt;) в замкнутом виде.Алгоритм получения замкнутого выражения для чисел &amp;lt;tex&amp;gt;a_n&amp;lt;/tex&amp;gt;, удовлетворяющих рекуррентному соотношению, с помощью производящих функций состоит из 4 шагов:&lt;br /&gt;
&lt;br /&gt;
# Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то есть количество предшествующих элементов, требуемых для вычисления элемента с номером &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;):&lt;br /&gt;
#: &amp;lt;tex&amp;gt;a_0=\ldots,&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt;a_1=\ldots,&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt;a_{k-1}=\ldots,&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt;a_{n}=\ldots, n \geqslant k.&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Домножить каждую строчку на &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; в соответствующей степени и просуммировать строчки для всех &amp;lt;tex&amp;gt;n \geqslant 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# В полученном уравнении привести все суммы к замкнутому виду. Получить уравнение для производящей функции.&lt;br /&gt;
# Выразить &amp;lt;tex&amp;gt;G(z)&amp;lt;/tex&amp;gt; в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для демонстрации универсальности метода рассмотрим довольно произвольное рекуррентное соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_0= 1,&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_1= 2,&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_n= 6a_{ n - 1}-8a_{n-2}+n, n \geqslant 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запишем производящую функцию для этой последовательности и преобразуем правую часть:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=a_0+a_1z+\sum\limits_{n=2}^\infty(6a_{ n - 1}-8a_{n-2}+n) z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=a_0+a_1z+6\sum\limits_{n=2}^\infty a_ { n-1}&lt;br /&gt;
z^n - 8\sum\limits_{n=2}^\infty a_ { n-2}&lt;br /&gt;
z^n+\sum\limits_{n=2}^\infty n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=a_0+a_1z+6z\sum\limits_{n=1}^\infty a_ { n }&lt;br /&gt;
z^n - 8z^2\sum\limits_{n=0}^\infty a_ { n }&lt;br /&gt;
z^n+\sum\limits_{n=2}^\infty n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=a_0+a_1z+6z(G(z)-a_0) - 8z^2G(z)+\sum\limits_{n=2}^\infty n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=1-4z+6zG(z) - 8z^2G(z)+\sum\limits_{n=2}^\infty n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы замкнуть последнюю сумму воспользуемся очень важным приемом, который используется при преобразовании производящих функций. Фактически мы имеем дело с последовательностью &amp;lt;tex&amp;gt;nb_n&amp;lt;/tex&amp;gt; (в нашем случае последовательность &amp;lt;tex&amp;gt;b_n= (1, 1, 1, \ldots)&amp;lt;/tex&amp;gt;). Такая последовательность получается путём дифференцирования функции &amp;lt;tex&amp;gt;B(z)&amp;lt;/tex&amp;gt;, производящей для &amp;lt;tex&amp;gt;b_n&amp;lt;/tex&amp;gt;, с последующим умножением результата на &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;zB'(z)=z(\sum\limits_{n=0}^\infty b_n z^n)'=z\sum\limits_{ n = 1}^\infty nb_n z^{n-1}=\sum\limits_{n=0}^\infty nb_n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Тогда замкнем последнее слагаемое следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{n=2}^\infty n z^n=z \sum\limits_{n=2}^\infty n z^{n-1}= z(\sum\limits_{ n = 2}^\infty z^n)'&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{n=2}^\infty z^n=\sum\limits_{n=0}^\infty z^n-1-z=\dfrac{1}{1-z}-1-z=\dfrac{z^2}{1-z}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;z(\dfrac{ z ^ 2}{1-z})'=\dfrac{z^2(2-z)}{(1-z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом наше последнее слагаемое примет вид:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=1-4z+6zG(z) - 8z^2G(z)+\dfrac{z^2(2-z)}{(1-z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Это уравнение для производящей функции. Из него выражаем &amp;lt;tex&amp;gt;G(z)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=\dfrac{1-6z+11z^2-5z^3}{(1-6z+8z^2)(1-z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Разложим знаменатель на множители и разобьём дробь на сумму простых дробей &amp;lt;ref&amp;gt;[http://www.genfunc.ru/theory/pril04/ О разложении рациональной функции в ряд]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; G(z) =\dfrac{1-6z+11z^2-5z^3}{(1-6z+8z^2)(1-z)^2}=\dfrac{1-6z+11z^2-5z^3}{(1-2z)(1-4z)(1-z)^2}=\dfrac{1/3}{(1-z)^2}+\dfrac{7/9}{1-z}-\dfrac{1/2}{1-2z}+\dfrac{7/18}{1-4z}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разложим первое слагаемое в ряд, используя расширенные биномиальные коэффициенты &amp;lt;ref&amp;gt;[http://www.genfunc.ru/theory/pril02/ Расширенные биномиальные коэффициенты]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\dfrac{ 1}{(1-z)^2}=(1-z)^{-2}=\sum\limits_{n=0}^{\infty} {-2\choose n}(-z)^n=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=\sum\limits_{n=0}^{\infty} (-1)^n{n+1\choose 1}(-z)^n=\sum\limits_{n=0}^{\infty}(n+1)z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=\dfrac{1/3}{(1-z)^2}+\dfrac{7/9}{1-z}-\dfrac{1/2}{1-2z}+\dfrac{7/18}{1-4z}=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=\dfrac{1}{3}\sum\limits_{n=0}^{\infty} (n+1)z^n +\dfrac{7}{9}\sum\limits_{n=0}^{\infty} z^n - \dfrac{1}{2}\sum\limits_{n=0}^{\infty} 2^n z^n + \dfrac{7}{18}\sum\limits_{n=0}^{\infty} 4^n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_n=\dfrac{n+1}{3}+\dfrac{7}{9}-\dfrac{2^n}{2}+\dfrac{7 \cdot 4^n}{18}=\dfrac{7 \cdot 4^n+6n+20}{18}-2^{n-1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Расчет дисперсии геометрического распределения ===&lt;br /&gt;
Метод производящих функций также используется для нахождения [[Дисперсия случайной величины | математического ожидания и дисперсии]] различных распределений в теории вероятностей. Например, в геометрическом распределении &amp;lt;ref&amp;gt;[http://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5 Геометрическое распределение]&amp;lt;/ref&amp;gt; для нахождения дисперсии &amp;lt;tex&amp;gt;\operatorname{D}(\xi)=\operatorname{E}(\xi^2)-(\operatorname{E}(\xi))^2&amp;lt;/tex&amp;gt; нужно найти два мат. ожидания:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\operatorname{E}(\xi)=\sum\limits_{n=1}^{\infty}n p(1-p)^{n-1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\operatorname{E}(\xi^2) = \sum\limits_{n=1}^{\infty}n^{2}p(1-p)^{n-1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
которые фактически являются производящими функциями последовательностей &amp;lt;tex&amp;gt;1, 2, 3\ldots&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;1, 4, 9\ldots&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\operatorname{ E}(\xi)=\sum\limits_{n=1}^{\infty}n p(1-p)^{n-1} = &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= \sum\limits_{n=0}^{\infty}(n+1) p(1-p)^{n} = &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= \sum\limits_{n=0}^{\infty}n p(1-p)^{n} + \sum\limits_{n=1}^{\infty} p(1-p)^{n-1} = &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= (1-p) \operatorname{E}(\xi) +1 \Rightarrow \operatorname{E}(\xi) = \dfrac{1}{p}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\operatorname{E}(\xi^2) = p\sum\limits_{n=1}^{\infty}n^{2}(1-p)^{n-1} =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=p\sum\limits_{n=1}^{\infty}n(n+1)(1-p)^{n-1} - p\sum\limits_{n=1}^{\infty}n(1-p)^{n-1} =&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\dfrac{\operatorname{d}^{2}}{\operatorname{d}p^{2}}\sum\limits_{n=1}^{\infty}(1-p)^{n+1} + p\dfrac{\operatorname{d}}{\operatorname{d}p}\sum\limits_{n=1}^{\infty}(1-p)^{n} =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\dfrac{\operatorname{d}^{2}}{\operatorname{d}p^{2}}\left(\sum\limits_{ n = 0}^{\infty}(1-p)^{n} \cdot(1-p)^2\right) +p\dfrac{\operatorname{d}}{\operatorname{d}p}\left(\sum\limits_{ n = 0}^{\infty}(1-p)^{n}\cdot(1-p)\right) =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\dfrac{\operatorname{d}^{2}}{\operatorname{d}p^{2}}\left(\dfrac{ 1}{1-(1-p)} \cdot(1-p)^2\right) +p\dfrac{\operatorname{d}}{\operatorname{d}p}\left(\dfrac{ 1}{1-(1-p)}\cdot(1-p)\right) =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\dfrac{\operatorname{d}^{2}}{\operatorname{d}p^{2}}\left(\dfrac{ (1 - p) ^ 2}{p}\right) +p\dfrac{\operatorname{d}}{\operatorname{d}p}\left(\dfrac{ 1 - p}{p}\right) =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\cdot\dfrac{2}{p^3} - p\cdot\dfrac{1}{p^2} = \dfrac{2}{p^{2}} - \dfrac{1}{p} = \dfrac{2-p}{p^{2}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\operatorname{D}(\xi)=\operatorname{E}(\xi^2)-(\operatorname{E}(\xi))^2= \dfrac{2-p}{p^{2}}-\dfrac{1}{p^2}=\dfrac{1-p}{p^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Еще примеры ==&lt;br /&gt;
{{Задача&lt;br /&gt;
| about = &lt;br /&gt;
| definition = Рассмотрим множество путей на прямой, состоящих из шагов длины &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; вправо и влево. Найдите производящую функцию для числа таких путей из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, начинающихся в &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; и оканчивающихся: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(a)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt;б&amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; и не заходящих в отрицательную полупрямую.&lt;br /&gt;
}}&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;(a)&amp;lt;/tex&amp;gt; Заметим, что для того, чтобы закончить путь в 0 необходимо совершить равное число шагов вправо и влево. Тогда задача сводится к тому, чтобы выбрать &amp;lt;tex&amp;gt;\dfrac{n}{2}&amp;lt;/tex&amp;gt; позиций для, например, шагов вправо из всего &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов. Тогда ответом будет сумма от нуля до бесконечности по &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; всех &amp;lt;tex&amp;gt;C^{n}_{2n}&amp;lt;/tex&amp;gt;. То есть,&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
g(x) = \sum\limits_{0}^{\infty} C^{n}_{2n}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Рассмотрим &amp;lt;tex&amp;gt;f(x) = \sum\limits_{0}^{\infty} C_n x^n &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; {{---}} число Каталана. Тогда, заметим что &amp;lt;tex&amp;gt;f'(x) = \sum\limits_{0}^{\infty} n C_n x^{n-1} &amp;lt;/tex&amp;gt;. Т.к. &amp;lt;tex&amp;gt;C_n = \dfrac{1}{n+1} C_{2n}^n &amp;lt;/tex&amp;gt;, то справедливо равенство:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
g(x) = (n+1)f(x) = xf'(x) + f(x)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мы знаем, что производящая функция для чисел Каталана равна &amp;lt;tex&amp;gt;f(x) = \dfrac{1-\sqrt{1-4x}}{2x}&amp;lt;/tex&amp;gt;. Найдем &amp;lt;tex&amp;gt;f'(x)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
f'(x) = \dfrac{\dfrac{4x}{\sqrt{1-4x}} - 2 + 2\sqrt{1-4x}}{4x^2} = \dfrac{1 - 2x - \sqrt{1-4x}}{2x^2 \sqrt{1-4x}}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Соответственно, ответом будет производящая функция вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
g(x) = \dfrac{1 - 2x - \sqrt{1-4x}}{2x \sqrt{1-4x}} + \dfrac{1-\sqrt{1-4x}}{2x}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(б) Заметим, что задача аналогична Правильной скобочной последовательности. Тогда производящей функцией для нашей задачи будет производящая функция для ПСП, а именно:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
g(x) = \dfrac{1-\sqrt{1-4x}}{2x}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
=== Примеры простых производящих функций ===&lt;br /&gt;
На последнем шаге приведения производящей функции к замкнутому виду требуется разложить полученные слагаемые в ряд. Для этого можно воспользоваться таблицей основных производящих функций &amp;lt;ref&amp;gt;[http://www.genfunc.ru/theory/pril03/ Таблица производящих функций]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Все суммы выполняются по переменной &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;\infty&amp;lt;/tex&amp;gt;. Элементы последовательности нумеруются от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:30cm&amp;quot; border=1&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#EEEEFF&lt;br /&gt;
| '''Последовательность''' || '''Производящая функция в виде ряда''' || '''Производящая функция в замкнутом виде'''&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 0, 0,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(0, 0, \ldots, 0, 1, 0, 0\ldots)&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; нулей в начале) || &amp;lt;tex&amp;gt;z^m&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;z^m&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 1, 1,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{1-z}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 0, 0, \ldots, 0, 1, 0, 0, \ldots 0, 1, 0, 0\ldots)&amp;lt;/tex&amp;gt; (повторяется через &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;) || &amp;lt;tex&amp;gt;\sum\limits z^{nm}&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{1-z^m}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, -1, 1, -1,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits (-1)^nz^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{1+z}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 2, 3, 4,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits (n+1)z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 2, 4, 8, 16,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits 2^nz^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-2z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, r, r^2, r^3,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits r^nz^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-rz)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;{m\choose 0}, {m\choose 1}, {m\choose 2}, {m\choose 3},\ldots&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits {m\choose n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;(1+z)^m&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;1, {{m}\choose m}, {{m+1}\choose m}, {{m+2}\choose m},\ldots&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits {{m+n-1}\choose n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-z)^m}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;1, {{m+1}\choose m}, {{m+2}\choose m}, {{m+3}\choose m},\ldots&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits {{m+n}\choose n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-z)^{m+1}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(0, 1, -\dfrac{1}{2}, \dfrac{1}{3}, -\dfrac{1}{4},\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits \dfrac{(-1)^{n+1}}{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\ln(1+z)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 1, \dfrac{1}{2}, \dfrac{1}{6}, \dfrac{1}{24},\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits \dfrac{1}{n!}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;e^z&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, -\dfrac{1}{2!}m^2, \dfrac{1}{4!}m^4, -\dfrac{1}{6!}m^6, \dfrac{1}{8!}m^8,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits \dfrac{1}{(2n)!}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;m^{(2n)}&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\cos m&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(m, -\dfrac{1}{3!}m^3, \dfrac{1}{5!}m^5, -\dfrac{1}{7!}m^7, \dfrac{1}{9!}m^9,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits \dfrac{1}{(2n-1)!}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;m^{(2n-1)}&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sin m&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации == &lt;br /&gt;
* [http://kvant.mirror1.mccme.ru/1988/11/razbienie_chisel.htm Вайнштейн Ф., Разбиение чисел. Журнал &amp;quot;Квант&amp;quot; № 11, 1988 год]&lt;br /&gt;
* [http://www.genfunc.ru/ Производящие функции]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Generating_function Wikipedia {{---}} Generating function]&lt;br /&gt;
* [[Нахождение количества разбиений числа на слагаемые|Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]]&lt;br /&gt;
* Graham, Knuth, and Patashnik: Concrete Mathematics&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Комбинаторика]]&lt;br /&gt;
[[Категория: Подсчёт числа объектов]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D1%8F%D1%89%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F&amp;diff=61505</id>
		<title>Производящая функция</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D1%8F%D1%89%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F&amp;diff=61505"/>
				<updated>2017-06-13T18:54:33Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Примеры простых производящих функций */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение &lt;br /&gt;
|definition=&lt;br /&gt;
'''Производящая функция''' (англ. ''generating function'') — это формальный степенной ряд:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=\sum\limits_{n=0}^\infty a_n z^n&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
порождающий(производящий) последовательность &amp;lt;tex&amp;gt;(a_0, a_1, a_2, \ldots)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
Метод производящих функций был разработан Эйлером в 1750-х годах.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
Производящая функция используется для:&lt;br /&gt;
&lt;br /&gt;
* Компактной записи информации о последовательности.&lt;br /&gt;
* Нахождения зависимости &amp;lt;tex&amp;gt;a_n(n)&amp;lt;/tex&amp;gt; для последовательности &amp;lt;tex&amp;gt;a_n&amp;lt;/tex&amp;gt;, заданной рекуррентным соотношением. Например, для чисел Фибоначчи.&lt;br /&gt;
* Нахождения рекуррентного соотношения для последовательности {{---}} вид производящей функции может помочь найти формулу.&lt;br /&gt;
* Исследования асимптотического поведения последовательности.&lt;br /&gt;
* Доказательства тождеств с последовательностями.&lt;br /&gt;
* Решения задачи подсчета объектов в комбинаторике.Например, в доказательстве[[Нахождение количества разбиений числа на слагаемые|пентагональной теоремы]] или в задаче нахождения количества расстановок &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ладей на доске &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;&amp;amp;nbsp;×&amp;amp;nbsp;&amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Вычисления бесконечных сумм.&lt;br /&gt;
&lt;br /&gt;
== Примеры производящих функций ==&lt;br /&gt;
Рассмотрим производящие функции для различных комбинаторных последовательностей:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\prod\limits_{ n = 1}^\infty(1-x^n)&amp;lt;/tex&amp;gt; {{---}} производящая функция для разности количества разбиений числа &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в четное и нечетное число различных слагаемых.Например коэффициент при &amp;lt;tex&amp;gt;x^5&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;+1&amp;lt;/tex&amp;gt;, потому-что существует два разбиение на четное число различных слагаемых &amp;lt;tex&amp;gt;(4+1; 3+2)&amp;lt;/tex&amp;gt; и одно на нечетное (&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;). Правильность этого легко осознать, если понять, что каждая скобка представляет какое-то слагаемое и мы можем его взять(второе слагаемое {{---}} &amp;lt;tex&amp;gt;-x^k&amp;lt;/tex&amp;gt;) или не взять(первое {{---}} &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;). Эта производящая функция используется в комбинаторном доказательстве пентагональной теоремы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \prod\limits_{n=1}^\infty \dfrac{1}{1-x^n}&amp;lt;/tex&amp;gt; {{---}} производящая функция для последовательности &amp;lt;tex&amp;gt;p_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; {{---}} число разбиений числа &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; на слагаемые.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\prod\limits_{ n = 1}^\infty(1+x^n)&amp;lt;/tex&amp;gt; {{---}} производящая функция для последовательности &amp;lt;tex&amp;gt;d_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;d_i&amp;lt;/tex&amp;gt; {{---}} число разбиений на различные слагаемые.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\prod\limits_{n=1}^\infty(1+x^{ 2n - 1})&amp;lt;/tex&amp;gt; {{---}} производящая функция для последовательности &amp;lt;tex&amp;gt;l_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;l_i&amp;lt;/tex&amp;gt; {{---}} число разбиений на нечётные слагаемые.С помощью метода производящих функций можно доказать, что производящие функции последовательностей равны, соответственно &amp;lt;tex&amp;gt;d_n = l_n &amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\prod\limits_{n=1}^\infty(1+x^{ n})=\prod\limits_{n=1}^\infty \dfrac{1-x^{2n}}{1-x^n}=\dfrac{1-x^2}{1-x}\dfrac{1-x^4}{1-x^2}\dfrac{1-x^6}{1-x^3}\ldots=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=\dfrac{1}{1-x}\dfrac{1}{1-x^3}\dfrac{1}{1-x^5}\ldots=\prod\limits_{n=1}^\infty(1+x^{ 2n - 1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Примеры решений задач методом производящих функций ==&lt;br /&gt;
=== Решение рекуррентных соотношений ===&lt;br /&gt;
Существует целый класс последовательностей, задаваемых рекуррентным соотношением, например, &amp;lt;tex&amp;gt;f_n&amp;lt;/tex&amp;gt; {{---}} числа Фибоначчи или &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; {{---}}&lt;br /&gt;
[[Числа Каталана | числа Каталана]]. Метод производящих функций позволяет получить выражение для &amp;lt;tex&amp;gt;a_n&amp;lt;/tex&amp;gt; через номер элемента в последовательности в замкнутом виде, то есть в таком виде, что выражение можно вычислить, предполагая, что &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; достаточно мало.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пусть последовательность &amp;lt;tex&amp;gt;(a_0, a_1, a_2, \ldots)&amp;lt;/tex&amp;gt; удовлетворяет некоторому рекуррентному соотношению.Мы хотим получить выражение для &amp;lt;tex&amp;gt;a_n&amp;lt;/tex&amp;gt; (при &amp;lt;tex&amp;gt;n \geqslant 0&amp;lt;/tex&amp;gt;) в замкнутом виде.Алгоритм получения замкнутого выражения для чисел &amp;lt;tex&amp;gt;a_n&amp;lt;/tex&amp;gt;, удовлетворяющих рекуррентному соотношению, с помощью производящих функций состоит из 4 шагов:&lt;br /&gt;
&lt;br /&gt;
# Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то есть количество предшествующих элементов, требуемых для вычисления элемента с номером &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, равно &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;):&lt;br /&gt;
#: &amp;lt;tex&amp;gt;a_0=\ldots,&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt;a_1=\ldots,&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt;a_{k-1}=\ldots,&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt;a_{n}=\ldots, n \geqslant k.&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Домножить каждую строчку на &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; в соответствующей степени и просуммировать строчки для всех &amp;lt;tex&amp;gt;n \geqslant 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# В полученном уравнении привести все суммы к замкнутому виду. Получить уравнение для производящей функции.&lt;br /&gt;
# Выразить &amp;lt;tex&amp;gt;G(z)&amp;lt;/tex&amp;gt; в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для демонстрации универсальности метода рассмотрим довольно произвольное рекуррентное соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_0= 1,&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_1= 2,&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_n= 6a_{ n - 1}-8a_{n-2}+n, n \geqslant 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запишем производящую функцию для этой последовательности и преобразуем правую часть:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=a_0+a_1z+\sum\limits_{n=2}^\infty(6a_{ n - 1}-8a_{n-2}+n) z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=a_0+a_1z+6\sum\limits_{n=2}^\infty a_ { n-1}&lt;br /&gt;
z^n - 8\sum\limits_{n=2}^\infty a_ { n-2}&lt;br /&gt;
z^n+\sum\limits_{n=2}^\infty n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=a_0+a_1z+6z\sum\limits_{n=1}^\infty a_ { n }&lt;br /&gt;
z^n - 8z^2\sum\limits_{n=0}^\infty a_ { n }&lt;br /&gt;
z^n+\sum\limits_{n=2}^\infty n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=a_0+a_1z+6z(G(z)-a_0) - 8z^2G(z)+\sum\limits_{n=2}^\infty n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=1-4z+6zG(z) - 8z^2G(z)+\sum\limits_{n=2}^\infty n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы замкнуть последнюю сумму воспользуемся очень важным приемом, который используется при преобразовании производящих функций. Фактически мы имеем дело с последовательностью &amp;lt;tex&amp;gt;nb_n&amp;lt;/tex&amp;gt; (в нашем случае последовательность &amp;lt;tex&amp;gt;b_n= (1, 1, 1, \ldots)&amp;lt;/tex&amp;gt;). Такая последовательность получается путём дифференцирования функции &amp;lt;tex&amp;gt;B(z)&amp;lt;/tex&amp;gt;, производящей для &amp;lt;tex&amp;gt;b_n&amp;lt;/tex&amp;gt;, с последующим умножением результата на &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;zB'(z)=z(\sum\limits_{n=0}^\infty b_n z^n)'=z\sum\limits_{ n = 1}^\infty nb_n z^{n-1}=\sum\limits_{n=0}^\infty nb_n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Тогда замкнем последнее слагаемое следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{n=2}^\infty n z^n=z \sum\limits_{n=2}^\infty n z^{n-1}= z(\sum\limits_{ n = 2}^\infty z^n)'&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{n=2}^\infty z^n=\sum\limits_{n=0}^\infty z^n-1-z=\dfrac{1}{1-z}-1-z=\dfrac{z^2}{1-z}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;z(\dfrac{ z ^ 2}{1-z})'=\dfrac{z^2(2-z)}{(1-z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом наше последнее слагаемое примет вид:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=1-4z+6zG(z) - 8z^2G(z)+\dfrac{z^2(2-z)}{(1-z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Это уравнение для производящей функции. Из него выражаем &amp;lt;tex&amp;gt;G(z)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=\dfrac{1-6z+11z^2-5z^3}{(1-6z+8z^2)(1-z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Разложим знаменатель на множители и разобьём дробь на сумму простых дробей &amp;lt;ref&amp;gt;[http://www.genfunc.ru/theory/pril04/ О разложении рациональной функции в ряд]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; G(z) =\dfrac{1-6z+11z^2-5z^3}{(1-6z+8z^2)(1-z)^2}=\dfrac{1-6z+11z^2-5z^3}{(1-2z)(1-4z)(1-z)^2}=\dfrac{1/3}{(1-z)^2}+\dfrac{7/9}{1-z}-\dfrac{1/2}{1-2z}+\dfrac{7/18}{1-4z}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разложим первое слагаемое в ряд, используя расширенные биномиальные коэффициенты &amp;lt;ref&amp;gt;[http://www.genfunc.ru/theory/pril02/ Расширенные биномиальные коэффициенты]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\dfrac{ 1}{(1-z)^2}=(1-z)^{-2}=\sum\limits_{n=0}^{\infty} {-2\choose n}(-z)^n=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=\sum\limits_{n=0}^{\infty} (-1)^n{n+1\choose 1}(-z)^n=\sum\limits_{n=0}^{\infty}(n+1)z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G(z)=\dfrac{1/3}{(1-z)^2}+\dfrac{7/9}{1-z}-\dfrac{1/2}{1-2z}+\dfrac{7/18}{1-4z}=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=\dfrac{1}{3}\sum\limits_{n=0}^{\infty} (n+1)z^n +\dfrac{7}{9}\sum\limits_{n=0}^{\infty} z^n - \dfrac{1}{2}\sum\limits_{n=0}^{\infty} 2^n z^n + \dfrac{7}{18}\sum\limits_{n=0}^{\infty} 4^n z^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_n=\dfrac{n+1}{3}+\dfrac{7}{9}-\dfrac{2^n}{2}+\dfrac{7 \cdot 4^n}{18}=\dfrac{7 \cdot 4^n+6n+20}{18}-2^{n-1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Расчет дисперсии геометрического распределения ===&lt;br /&gt;
Метод производящих функций также используется для нахождения [[Дисперсия случайной величины | математического ожидания и дисперсии]] различных распределений в теории вероятностей. Например, в геометрическом распределении &amp;lt;ref&amp;gt;[http://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5 Геометрическое распределение]&amp;lt;/ref&amp;gt; для нахождения дисперсии &amp;lt;tex&amp;gt;\operatorname{D}(\xi)=\operatorname{E}(\xi^2)-(\operatorname{E}(\xi))^2&amp;lt;/tex&amp;gt; нужно найти два мат. ожидания:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\operatorname{E}(\xi)=\sum\limits_{n=1}^{\infty}n p(1-p)^{n-1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\operatorname{E}(\xi^2) = \sum\limits_{n=1}^{\infty}n^{2}p(1-p)^{n-1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
которые фактически являются производящими функциями последовательностей &amp;lt;tex&amp;gt;1, 2, 3\ldots&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;1, 4, 9\ldots&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\operatorname{ E}(\xi)=\sum\limits_{n=1}^{\infty}n p(1-p)^{n-1} = &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= \sum\limits_{n=0}^{\infty}(n+1) p(1-p)^{n} = &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= \sum\limits_{n=0}^{\infty}n p(1-p)^{n} + \sum\limits_{n=1}^{\infty} p(1-p)^{n-1} = &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= (1-p) \operatorname{E}(\xi) +1 \Rightarrow \operatorname{E}(\xi) = \dfrac{1}{p}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\operatorname{E}(\xi^2) = p\sum\limits_{n=1}^{\infty}n^{2}(1-p)^{n-1} =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=p\sum\limits_{n=1}^{\infty}n(n+1)(1-p)^{n-1} - p\sum\limits_{n=1}^{\infty}n(1-p)^{n-1} =&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\dfrac{\operatorname{d}^{2}}{\operatorname{d}p^{2}}\sum\limits_{n=1}^{\infty}(1-p)^{n+1} + p\dfrac{\operatorname{d}}{\operatorname{d}p}\sum\limits_{n=1}^{\infty}(1-p)^{n} =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\dfrac{\operatorname{d}^{2}}{\operatorname{d}p^{2}}\left(\sum\limits_{ n = 0}^{\infty}(1-p)^{n} \cdot(1-p)^2\right) +p\dfrac{\operatorname{d}}{\operatorname{d}p}\left(\sum\limits_{ n = 0}^{\infty}(1-p)^{n}\cdot(1-p)\right) =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\dfrac{\operatorname{d}^{2}}{\operatorname{d}p^{2}}\left(\dfrac{ 1}{1-(1-p)} \cdot(1-p)^2\right) +p\dfrac{\operatorname{d}}{\operatorname{d}p}\left(\dfrac{ 1}{1-(1-p)}\cdot(1-p)\right) =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\dfrac{\operatorname{d}^{2}}{\operatorname{d}p^{2}}\left(\dfrac{ (1 - p) ^ 2}{p}\right) +p\dfrac{\operatorname{d}}{\operatorname{d}p}\left(\dfrac{ 1 - p}{p}\right) =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;= p\cdot\dfrac{2}{p^3} - p\cdot\dfrac{1}{p^2} = \dfrac{2}{p^{2}} - \dfrac{1}{p} = \dfrac{2-p}{p^{2}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\operatorname{D}(\xi)=\operatorname{E}(\xi^2)-(\operatorname{E}(\xi))^2= \dfrac{2-p}{p^{2}}-\dfrac{1}{p^2}=\dfrac{1-p}{p^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
== Приложения ==&lt;br /&gt;
=== Примеры простых производящих функций ===&lt;br /&gt;
На последнем шаге приведения производящей функции к замкнутому виду требуется разложить полученные слагаемые в ряд. Для этого можно воспользоваться таблицей основных производящих функций &amp;lt;ref&amp;gt;[http://www.genfunc.ru/theory/pril03/ Таблица производящих функций]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Все суммы выполняются по переменной &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;\infty&amp;lt;/tex&amp;gt;. Элементы последовательности нумеруются от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:30cm&amp;quot; border=1&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#EEEEFF&lt;br /&gt;
| '''Последовательность''' || '''Производящая функция в виде ряда''' || '''Производящая функция в замкнутом виде'''&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 0, 0,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(0, 0, \ldots, 0, 1, 0, 0\ldots)&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; нулей в начале) || &amp;lt;tex&amp;gt;z^m&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;z^m&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 1, 1,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{1-z}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 0, 0, \ldots, 0, 1, 0, 0, \ldots 0, 1, 0, 0\ldots)&amp;lt;/tex&amp;gt; (повторяется через &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;) || &amp;lt;tex&amp;gt;\sum\limits z^{nm}&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{1-z^m}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, -1, 1, -1,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits (-1)^nz^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{1+z}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 2, 3, 4,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits (n+1)z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 2, 4, 8, 16,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits 2^nz^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-2z)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, r, r^2, r^3,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits r^nz^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-rz)^2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;{m\choose 0}, {m\choose 1}, {m\choose 2}, {m\choose 3},\ldots&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits {m\choose n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;(1+z)^m&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;1, {{m}\choose m}, {{m+1}\choose m}, {{m+2}\choose m},\ldots&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits {{m+n-1}\choose n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-z)^m}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;1, {{m+1}\choose m}, {{m+2}\choose m}, {{m+3}\choose m},\ldots&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits {{m+n}\choose n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\dfrac{1}{(1-z)^{m+1}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(0, 1, -\dfrac{1}{2}, \dfrac{1}{3}, -\dfrac{1}{4},\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits \dfrac{(-1)^{n+1}}{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\ln(1+z)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, 1, \dfrac{1}{2}, \dfrac{1}{6}, \dfrac{1}{24},\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits \dfrac{1}{n!}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;z^n&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;e^z&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(1, -\dfrac{1}{2!}m^2, \dfrac{1}{4!}m^4, -\dfrac{1}{6!}m^6, \dfrac{1}{8!}m^8,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits \dfrac{1}{(2n)!}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;m^{(2n)}&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\cos m&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
| &amp;lt;tex&amp;gt;(m, -\dfrac{1}{3!}m^3, \dfrac{1}{5!}m^5, -\dfrac{1}{7!}m^7, \dfrac{1}{9!}m^9,\ldots)&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sum\limits \dfrac{1}{(2n-1)!}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;m^{(2n-1)}&amp;lt;/tex&amp;gt; || &amp;lt;tex&amp;gt;\sin m&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации == &lt;br /&gt;
* [http://kvant.mirror1.mccme.ru/1988/11/razbienie_chisel.htm Вайнштейн Ф., Разбиение чисел. Журнал &amp;quot;Квант&amp;quot; № 11, 1988 год]&lt;br /&gt;
* [http://www.genfunc.ru/ Производящие функции]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Generating_function Wikipedia {{---}} Generating function]&lt;br /&gt;
* [[Нахождение количества разбиений числа на слагаемые|Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]]&lt;br /&gt;
* Graham, Knuth, and Patashnik: Concrete Mathematics&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Комбинаторика]]&lt;br /&gt;
[[Категория: Подсчёт числа объектов]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57971</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57971"/>
				<updated>2016-12-18T18:45:39Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ДПФ также применяют для быстрого умножения двух длинных чисел, которые в свою очередь могут быть представлены в виде полиномов.&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый [[Первообразные корни | примитивным]].&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, получаем обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; -1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\dfrac{1}{-16i}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
-4i &amp;amp; -4i &amp;amp; -4i &amp;amp; -4i \\&lt;br /&gt;
-4i &amp;amp; -4 &amp;amp; 4i &amp;amp; 4 \\&lt;br /&gt;
-4i &amp;amp; 4i &amp;amp; -4i &amp;amp; 4i \\&lt;br /&gt;
-4i &amp;amp; 4 &amp;amp; 4i &amp;amp; -4&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a_0 = \dfrac{1}{4} (10 + 1 + 3i + 8 + 1 - 3i) = 5 \\&lt;br /&gt;
a_1 = \dfrac{1}{4} (10 + (1 + 3i)(-i) + (-1)8 + (1 - 3i)i) = 2 \\&lt;br /&gt;
a_2 = \dfrac{1}{4} (10 + (1 + 3i)(-1) + 8 + (1 - 3i)(-1)) = 4 \\&lt;br /&gt;
a_3 = \dfrac{1}{4} (10 + (1 + 3i)i + (-1)8 + (1 - 3i)(-i)) = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Алгоритмы алгебры и теории чисел]]&lt;br /&gt;
[[Категория: Основные элементы теории чисел]]&lt;br /&gt;
[[Категория: Основные алгоритмы теории чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57970</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57970"/>
				<updated>2016-12-18T18:45:22Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform, FFT'') {{---}} метод, позволяющий вычислять [[Дискретное преобразование Фурье | дискретное преобразование Фурье]] за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Cначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;\mathrm{DFT}(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея ''разделяй и властвуй'', то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Алгоритмы алгебры и теории чисел]]&lt;br /&gt;
[[Категория: Основные элементы теории чисел]]&lt;br /&gt;
[[Категория: Основные алгоритмы теории чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57897</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57897"/>
				<updated>2016-12-15T19:24:57Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ДПФ также применяют для быстрого умножения двух длинных чисел, которые в свою очередь могут быть представлены в виде полиномов.&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый [[Первообразные корни | примитивным]].&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, получаем обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; -1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\dfrac{1}{-16i}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
-4i &amp;amp; -4i &amp;amp; -4i &amp;amp; -4i \\&lt;br /&gt;
-4i &amp;amp; -4 &amp;amp; 4i &amp;amp; 4 \\&lt;br /&gt;
-4i &amp;amp; 4i &amp;amp; -4i &amp;amp; 4i \\&lt;br /&gt;
-4i &amp;amp; 4 &amp;amp; 4i &amp;amp; -4&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a_0 = \dfrac{1}{4} (10 + 1 + 3i + 8 + 1 - 3i) = 5 \\&lt;br /&gt;
a_1 = \dfrac{1}{4} (10 + (1 + 3i)(-i) + (-1)8 + (1 - 3i)i) = 2 \\&lt;br /&gt;
a_2 = \dfrac{1}{4} (10 + (1 + 3i)(-1) + 8 + (1 - 3i)(-1)) = 4 \\&lt;br /&gt;
a_3 = \dfrac{1}{4} (10 + (1 + 3i)i + (-1)8 + (1 - 3i)(-i)) = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Алгоритмы алгебры и теории чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57896</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57896"/>
				<updated>2016-12-15T19:23:13Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Применение ДПФ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ДПФ также применяют для быстрого умножения двух длинных чисел, которые в свою очередь могут быть представлены в виде полиномов.&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый [[Первообразные корни | примитивным]].&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, получаем обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; -1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\dfrac{1}{-16i}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
-4i &amp;amp; -4i &amp;amp; -4i &amp;amp; -4i \\&lt;br /&gt;
-4i &amp;amp; -4 &amp;amp; 4i &amp;amp; 4 \\&lt;br /&gt;
-4i &amp;amp; 4i &amp;amp; -4i &amp;amp; 4i \\&lt;br /&gt;
-4i &amp;amp; 4 &amp;amp; 4i &amp;amp; -4&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a_0 = \dfrac{1}{4} (10 + 1 + 3i + 8 + 1 - 3i) = 5 \\&lt;br /&gt;
a_1 = \dfrac{1}{4} (10 + (1 + 3i)(-i) + (-1)8 + (1 - 3i)i) = 2 \\&lt;br /&gt;
a_2 = \dfrac{1}{4} (10 + (1 + 3i)(-1) + 8 + (1 - 3i)(-1)) = 4 \\&lt;br /&gt;
a_3 = \dfrac{1}{4} (10 + (1 + 3i)i + (-1)8 + (1 - 3i)(-i)) = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57895</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57895"/>
				<updated>2016-12-15T19:21:27Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый [[Первообразные корни | примитивным]].&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, получаем обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; -1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\dfrac{1}{-16i}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
-4i &amp;amp; -4i &amp;amp; -4i &amp;amp; -4i \\&lt;br /&gt;
-4i &amp;amp; -4 &amp;amp; 4i &amp;amp; 4 \\&lt;br /&gt;
-4i &amp;amp; 4i &amp;amp; -4i &amp;amp; 4i \\&lt;br /&gt;
-4i &amp;amp; 4 &amp;amp; 4i &amp;amp; -4&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a_0 = \dfrac{1}{4} (10 + 1 + 3i + 8 + 1 - 3i) = 5 \\&lt;br /&gt;
a_1 = \dfrac{1}{4} (10 + (1 + 3i)(-i) + (-1)8 + (1 - 3i)i) = 2 \\&lt;br /&gt;
a_2 = \dfrac{1}{4} (10 + (1 + 3i)(-1) + 8 + (1 - 3i)(-1)) = 4 \\&lt;br /&gt;
a_3 = \dfrac{1}{4} (10 + (1 + 3i)i + (-1)8 + (1 - 3i)(-i)) = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57894</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57894"/>
				<updated>2016-12-15T19:20:56Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый [[Первообразные корни | примитивным]].&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, получаем обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; -1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\dfrac{1}{-16i}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
-4i &amp;amp; -4i &amp;amp; -4i &amp;amp; -4i \\&lt;br /&gt;
-4i &amp;amp; -4 &amp;amp; 4i &amp;amp; 4 \\&lt;br /&gt;
-4i &amp;amp; 4i &amp;amp; -4i &amp;amp; 4i \\&lt;br /&gt;
-4i &amp;amp; 4 &amp;amp; 4i &amp;amp; -4&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a_0 = \dfrac{1}{4} (10 + 1 + 3i + 8 + 1 - 3i) = 5 \\&lt;br /&gt;
a_1 = \dfrac{1}{4} (10 + (1 + 3i)(-i) + (-1)8 + (1 - 3i)i) = 2 \\&lt;br /&gt;
a_2 = \dfrac{1}{4} (10 + (1 + 3i)(-1) + 8 + (1 - 3i)(-1)) = 4 \\&lt;br /&gt;
a_3 = \dfrac{1}{4} (10 + (1 + 3i)i + (-1)8 + (1 - 3i)(-i)) = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57893</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57893"/>
				<updated>2016-12-15T19:20:44Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform, FFT'') {{---}} метод, позволяющий вычислять [[Дискретное преобразование Фурье | дискретное преобразование Фурье]] за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Cначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;\mathrm{DFT}(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея ''разделяй и властвуй'', то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57892</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57892"/>
				<updated>2016-12-15T19:17:49Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform, FFT'') {{---}} метод, позволяющий вычислять [[Дискретное преобразование Фурье | дискретное преобразование Фурье]] за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Cначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;\mathrm{DFT}(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея ''разделяй и властвуй'', то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57891</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57891"/>
				<updated>2016-12-15T19:14:31Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform, FFT'') {{---}} метод, позволяющий вычислять [[Дискретное преобразование Фурье | дискретное преобразование Фурье]] за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Cначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;\mathrm{DFT}(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея ''разделяй и властвуй'', то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Основные элементы теории чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57890</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57890"/>
				<updated>2016-12-15T19:11:46Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform, FFT'') {{---}} метод, позволяющий вычислять [[Дискретное преобразование Фурье | дискретное преобразование Фурье]] за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Cначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;\mathrm{DFT}(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея ''разделяй и властвуй'', то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Основные алгоритмы теории чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B_%D0%B8_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D0%B8_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=57889</id>
		<title>Алгоритмы алгебры и теории чисел</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B_%D0%B8_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D0%B8_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=57889"/>
				<updated>2016-12-15T19:09:07Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Практика - Основные алгоритмы теории чисел */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Лекция - Классы чисел и основная теорема арифметики ==&lt;br /&gt;
* [[Классы чисел]]&lt;br /&gt;
* [[Натуральные и целые числа]]&lt;br /&gt;
* [[Простые числа]]&lt;br /&gt;
* [[Наибольший общий делитель]]&lt;br /&gt;
* [[Основная теорема арифметики]]&lt;br /&gt;
* [[Теоремы о простых числах]]&lt;br /&gt;
=== Практика - Разложение на множители и длинная арифметика ===&lt;br /&gt;
* [[Системы счисления]]&lt;br /&gt;
* [[Арифметика чисел в b-ичной системе счисления (Длинная арифметика)]]&lt;br /&gt;
* [[Разложение на множители (факторизация)]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Основные элементы теории чисел ==&lt;br /&gt;
* [[Сравнения, система вычетов, решение линейных систем по модулю]]&lt;br /&gt;
* [[Китайская теорема об остатках]]&lt;br /&gt;
* [[Теорема Ферма]]&lt;br /&gt;
* [[Теорема Вильсона]]&lt;br /&gt;
* [[Мультипликативность функции, свертка Дирихле]]&lt;br /&gt;
* [[Функция Эйлера]]&lt;br /&gt;
* [[Количество делителей, сумма делителей]]&lt;br /&gt;
* [[Функция Мебиуса]]&lt;br /&gt;
&lt;br /&gt;
=== Практика - Основные алгоритмы теории чисел ===&lt;br /&gt;
* [[Решето Эратосфена]]&lt;br /&gt;
* [[Быстрое возведение в степень]]&lt;br /&gt;
* [[Умножение по Монтгомери]]&lt;br /&gt;
* [[Дискретное преобразование Фурье]]&lt;br /&gt;
* [[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Основы теории групп ==&lt;br /&gt;
* [[Полугруппа]], [[моноид]], [[группа]]&lt;br /&gt;
* [[Абелева группа]], [[Конечная группа]]&lt;br /&gt;
* [[Гомоморфизм групп]], [[изоморфизм групп]]&lt;br /&gt;
* [[Подгруппа]], [[нормальная подгруппа]]&lt;br /&gt;
* [[Порядок элемента группы]], [[циклическая группа]], [[конечно порожденная группа]]&lt;br /&gt;
* [[Регулярное представление группы]]&lt;br /&gt;
* [[Теорема о подгруппах циклической группы]]&lt;br /&gt;
* [[Смежные классы]], [[теорема Лагранжа]], [[факторгруппы]]&lt;br /&gt;
=== Практика - Основы теории групп ===&lt;br /&gt;
* [[Вычисление порядка элемента в группе]]&lt;br /&gt;
* [[Вычисление порядка перестановки в группе перестановок]]&lt;br /&gt;
* [[Дискретное логарифмирование в группе]]&lt;br /&gt;
* [[Действие группы на множестве]]&lt;br /&gt;
* [[Лемма Бернсайда, задача о числе ожерелий]]&lt;br /&gt;
* [[Представление групп]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Основы теории колец ==&lt;br /&gt;
*[[Определение кольца, подкольца, изоморфизмы колец]]&lt;br /&gt;
*[[Делители нуля, области целостности]]&lt;br /&gt;
*[[Единицы (обратимые элементы), группа обратимых элементов]]&lt;br /&gt;
*[[Неразложимые элементы, ассоциированные элементы и разложение на множители в целостных кольцах]]&lt;br /&gt;
*[[Евклидовы кольца]]&lt;br /&gt;
=== Практика - Арифметика полиномов от одной переменной над полем ===&lt;br /&gt;
&lt;br /&gt;
== Лекция - Основы теории полей ==&lt;br /&gt;
* [[Определение поля и подполя, изоморфизмы полей]]&lt;br /&gt;
* [[Примеры полей]]&lt;br /&gt;
* [[Мультипликативная группа поля]]&lt;br /&gt;
* [[Расширения полей]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Первообразные корни и квадратичные вычеты ==&lt;br /&gt;
* [[Теорема о цикличности мультипликативной группы поля Z/pZ|Теорема о цикличности мультипликативной группы поля &amp;lt;tex&amp;gt;\mathbb{Z}/p\mathbb{Z}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Первообразные корни]]&lt;br /&gt;
** [[Существование первообразных корней по определенным модулям|Теорема о существовании первообразных корней по модулям вида &amp;lt;tex&amp;gt;2,4,p^n,2\cdot p^n&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Квадратичные вычеты|Квадратичные вычеты, количество квадратичных вычетов по простому модулю]]&lt;br /&gt;
** [[Символ Лежандра, критерий Эйлера]]&lt;br /&gt;
** [[Теорема о (((p-1)/2)!)^2=-1(mod p)|Теорема о &amp;lt;tex&amp;gt;((\frac{p-1}{2})!)^2\equiv -1 (mod ~p)&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;p=4\cdot k+1&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
** [[Лемма Гаусса для вычисления квадратичного характера числа по простому модулю]]&lt;br /&gt;
=== Практика - Первообразные корни и квадратичные вычеты ===&lt;br /&gt;
&lt;br /&gt;
== Лекция - Квадратичные вычеты ==&lt;br /&gt;
*[[Квадратичный закон взаимности]]&lt;br /&gt;
*[[Символ Якоби и его свойства]]&lt;br /&gt;
*[[Обобщенный квадратичный закон взаимности]]&lt;br /&gt;
*[[Алгоритм вычисления символа Якоби]]&lt;br /&gt;
=== Практика - Вероятностные тесты чисел на простоту ===&lt;br /&gt;
*[[Тест Ферма проверки чисел на простоту, числа Кармайкла]]&lt;br /&gt;
*[[Тест Соловея-Штрассена]]&lt;br /&gt;
*[[Тест Миллера-Рабина]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Аналитическая теория чисел ==&lt;br /&gt;
* [[Факты из математического анализа]]&lt;br /&gt;
* [[Теорема Чебышёва]]&lt;br /&gt;
* [[Постулат Бертрана]]&lt;br /&gt;
* [[Уточнение констант в теореме Чебышёва]]&lt;br /&gt;
* [[Сумма обратных к простым]]&lt;br /&gt;
* [[Асимптотический закон распределения простых чисел]]&lt;br /&gt;
&lt;br /&gt;
=== Практика - Вычисление &amp;lt;math&amp;gt;\pi(x)&amp;lt;/math&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
== Лекция - Цепные (непрерывные) дроби и уравнение Пелля ==&lt;br /&gt;
* [[Цепная дробь]]&lt;br /&gt;
** [[Связь цепных дробей и алгоритма Евклида]]&lt;br /&gt;
** [[Сходимость цепных дробей]]&lt;br /&gt;
** [[Цепные дроби как приближение к числу]]&lt;br /&gt;
** [[Квадратичная иррациональность]]&lt;br /&gt;
** [[Периодичность цепных дробей]]&lt;br /&gt;
** [[Цепные дроби для sqrtd и квадратичных иррациональностей|Цепные дроби для &amp;lt;tex&amp;gt;\sqrt{d}&amp;lt;/tex&amp;gt; и квадратичных иррациональностей]]&lt;br /&gt;
* [[Уравнение Пелля]]&lt;br /&gt;
* [[Представление простых в виде суммы двух квадратов]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Конечные поля ==&lt;br /&gt;
=== Практика - Методы разложения полиномов на множители над конечными полями ===&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B_%D0%B8_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D0%B8_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=57888</id>
		<title>Алгоритмы алгебры и теории чисел</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B_%D0%B8_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D0%B8_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=57888"/>
				<updated>2016-12-15T19:08:46Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Лекция - Аналитическая теория чисел */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Лекция - Классы чисел и основная теорема арифметики ==&lt;br /&gt;
* [[Классы чисел]]&lt;br /&gt;
* [[Натуральные и целые числа]]&lt;br /&gt;
* [[Простые числа]]&lt;br /&gt;
* [[Наибольший общий делитель]]&lt;br /&gt;
* [[Основная теорема арифметики]]&lt;br /&gt;
* [[Теоремы о простых числах]]&lt;br /&gt;
=== Практика - Разложение на множители и длинная арифметика ===&lt;br /&gt;
* [[Системы счисления]]&lt;br /&gt;
* [[Арифметика чисел в b-ичной системе счисления (Длинная арифметика)]]&lt;br /&gt;
* [[Разложение на множители (факторизация)]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Основные элементы теории чисел ==&lt;br /&gt;
* [[Сравнения, система вычетов, решение линейных систем по модулю]]&lt;br /&gt;
* [[Китайская теорема об остатках]]&lt;br /&gt;
* [[Теорема Ферма]]&lt;br /&gt;
* [[Теорема Вильсона]]&lt;br /&gt;
* [[Мультипликативность функции, свертка Дирихле]]&lt;br /&gt;
* [[Функция Эйлера]]&lt;br /&gt;
* [[Количество делителей, сумма делителей]]&lt;br /&gt;
* [[Функция Мебиуса]]&lt;br /&gt;
&lt;br /&gt;
=== Практика - Основные алгоритмы теории чисел ===&lt;br /&gt;
* [[Решето Эратосфена]]&lt;br /&gt;
* [[Быстрое возведение в степень]]&lt;br /&gt;
* [[Умножение по Монтгомери]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Основы теории групп ==&lt;br /&gt;
* [[Полугруппа]], [[моноид]], [[группа]]&lt;br /&gt;
* [[Абелева группа]], [[Конечная группа]]&lt;br /&gt;
* [[Гомоморфизм групп]], [[изоморфизм групп]]&lt;br /&gt;
* [[Подгруппа]], [[нормальная подгруппа]]&lt;br /&gt;
* [[Порядок элемента группы]], [[циклическая группа]], [[конечно порожденная группа]]&lt;br /&gt;
* [[Регулярное представление группы]]&lt;br /&gt;
* [[Теорема о подгруппах циклической группы]]&lt;br /&gt;
* [[Смежные классы]], [[теорема Лагранжа]], [[факторгруппы]]&lt;br /&gt;
=== Практика - Основы теории групп ===&lt;br /&gt;
* [[Вычисление порядка элемента в группе]]&lt;br /&gt;
* [[Вычисление порядка перестановки в группе перестановок]]&lt;br /&gt;
* [[Дискретное логарифмирование в группе]]&lt;br /&gt;
* [[Действие группы на множестве]]&lt;br /&gt;
* [[Лемма Бернсайда, задача о числе ожерелий]]&lt;br /&gt;
* [[Представление групп]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Основы теории колец ==&lt;br /&gt;
*[[Определение кольца, подкольца, изоморфизмы колец]]&lt;br /&gt;
*[[Делители нуля, области целостности]]&lt;br /&gt;
*[[Единицы (обратимые элементы), группа обратимых элементов]]&lt;br /&gt;
*[[Неразложимые элементы, ассоциированные элементы и разложение на множители в целостных кольцах]]&lt;br /&gt;
*[[Евклидовы кольца]]&lt;br /&gt;
=== Практика - Арифметика полиномов от одной переменной над полем ===&lt;br /&gt;
&lt;br /&gt;
== Лекция - Основы теории полей ==&lt;br /&gt;
* [[Определение поля и подполя, изоморфизмы полей]]&lt;br /&gt;
* [[Примеры полей]]&lt;br /&gt;
* [[Мультипликативная группа поля]]&lt;br /&gt;
* [[Расширения полей]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Первообразные корни и квадратичные вычеты ==&lt;br /&gt;
* [[Теорема о цикличности мультипликативной группы поля Z/pZ|Теорема о цикличности мультипликативной группы поля &amp;lt;tex&amp;gt;\mathbb{Z}/p\mathbb{Z}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Первообразные корни]]&lt;br /&gt;
** [[Существование первообразных корней по определенным модулям|Теорема о существовании первообразных корней по модулям вида &amp;lt;tex&amp;gt;2,4,p^n,2\cdot p^n&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Квадратичные вычеты|Квадратичные вычеты, количество квадратичных вычетов по простому модулю]]&lt;br /&gt;
** [[Символ Лежандра, критерий Эйлера]]&lt;br /&gt;
** [[Теорема о (((p-1)/2)!)^2=-1(mod p)|Теорема о &amp;lt;tex&amp;gt;((\frac{p-1}{2})!)^2\equiv -1 (mod ~p)&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;p=4\cdot k+1&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
** [[Лемма Гаусса для вычисления квадратичного характера числа по простому модулю]]&lt;br /&gt;
=== Практика - Первообразные корни и квадратичные вычеты ===&lt;br /&gt;
&lt;br /&gt;
== Лекция - Квадратичные вычеты ==&lt;br /&gt;
*[[Квадратичный закон взаимности]]&lt;br /&gt;
*[[Символ Якоби и его свойства]]&lt;br /&gt;
*[[Обобщенный квадратичный закон взаимности]]&lt;br /&gt;
*[[Алгоритм вычисления символа Якоби]]&lt;br /&gt;
=== Практика - Вероятностные тесты чисел на простоту ===&lt;br /&gt;
*[[Тест Ферма проверки чисел на простоту, числа Кармайкла]]&lt;br /&gt;
*[[Тест Соловея-Штрассена]]&lt;br /&gt;
*[[Тест Миллера-Рабина]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Аналитическая теория чисел ==&lt;br /&gt;
* [[Факты из математического анализа]]&lt;br /&gt;
* [[Теорема Чебышёва]]&lt;br /&gt;
* [[Постулат Бертрана]]&lt;br /&gt;
* [[Уточнение констант в теореме Чебышёва]]&lt;br /&gt;
* [[Сумма обратных к простым]]&lt;br /&gt;
* [[Асимптотический закон распределения простых чисел]]&lt;br /&gt;
&lt;br /&gt;
=== Практика - Вычисление &amp;lt;math&amp;gt;\pi(x)&amp;lt;/math&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
== Лекция - Цепные (непрерывные) дроби и уравнение Пелля ==&lt;br /&gt;
* [[Цепная дробь]]&lt;br /&gt;
** [[Связь цепных дробей и алгоритма Евклида]]&lt;br /&gt;
** [[Сходимость цепных дробей]]&lt;br /&gt;
** [[Цепные дроби как приближение к числу]]&lt;br /&gt;
** [[Квадратичная иррациональность]]&lt;br /&gt;
** [[Периодичность цепных дробей]]&lt;br /&gt;
** [[Цепные дроби для sqrtd и квадратичных иррациональностей|Цепные дроби для &amp;lt;tex&amp;gt;\sqrt{d}&amp;lt;/tex&amp;gt; и квадратичных иррациональностей]]&lt;br /&gt;
* [[Уравнение Пелля]]&lt;br /&gt;
* [[Представление простых в виде суммы двух квадратов]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Конечные поля ==&lt;br /&gt;
=== Практика - Методы разложения полиномов на множители над конечными полями ===&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57886</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57886"/>
				<updated>2016-12-15T19:03:34Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Источники */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform, FFT'') {{---}} метод, позволяющий вычислять [[Дискретное преобразование Фурье | дискретное преобразование Фурье]] за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Cначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;\mathrm{DFT}(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея ''разделяй и властвуй'', то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57885</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57885"/>
				<updated>2016-12-15T18:59:55Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* ДПФ в модульной арифметике */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый [[Первообразные корни | примитивным]].&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, получаем обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; -1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\dfrac{1}{-16i}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
-4i &amp;amp; -4i &amp;amp; -4i &amp;amp; -4i \\&lt;br /&gt;
-4i &amp;amp; -4 &amp;amp; 4i &amp;amp; 4 \\&lt;br /&gt;
-4i &amp;amp; 4i &amp;amp; -4i &amp;amp; 4i \\&lt;br /&gt;
-4i &amp;amp; 4 &amp;amp; 4i &amp;amp; -4&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a_0 = \dfrac{1}{4} (10 + 1 + 3i + 8 + 1 - 3i) = 5 \\&lt;br /&gt;
a_1 = \dfrac{1}{4} (10 + (1 + 3i)(-i) + (-1)8 + (1 - 3i)i) = 2 \\&lt;br /&gt;
a_2 = \dfrac{1}{4} (10 + (1 + 3i)(-1) + 8 + (1 - 3i)(-1)) = 4 \\&lt;br /&gt;
a_3 = \dfrac{1}{4} (10 + (1 + 3i)i + (-1)8 + (1 - 3i)(-i)) = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57884</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57884"/>
				<updated>2016-12-15T18:58:59Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* ДПФ в модульной арифметике */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти [[Примитивные корни | примитивный корень]], то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, получаем обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; -1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\dfrac{1}{-16i}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
-4i &amp;amp; -4i &amp;amp; -4i &amp;amp; -4i \\&lt;br /&gt;
-4i &amp;amp; -4 &amp;amp; 4i &amp;amp; 4 \\&lt;br /&gt;
-4i &amp;amp; 4i &amp;amp; -4i &amp;amp; 4i \\&lt;br /&gt;
-4i &amp;amp; 4 &amp;amp; 4i &amp;amp; -4&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a_0 = \dfrac{1}{4} (10 + 1 + 3i + 8 + 1 - 3i) = 5 \\&lt;br /&gt;
a_1 = \dfrac{1}{4} (10 + (1 + 3i)(-i) + (-1)8 + (1 - 3i)i) = 2 \\&lt;br /&gt;
a_2 = \dfrac{1}{4} (10 + (1 + 3i)(-1) + 8 + (1 - 3i)(-1)) = 4 \\&lt;br /&gt;
a_3 = \dfrac{1}{4} (10 + (1 + 3i)i + (-1)8 + (1 - 3i)(-i)) = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57864</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57864"/>
				<updated>2016-12-14T22:12:53Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Источники */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform, FFT'') {{---}} метод, позволяющий вычислять [[Дискретное преобразование Фурье | дискретное преобразование Фурье]] за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Cначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;\mathrm{DFT}(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея ''разделяй и властвуй'', то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57863</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57863"/>
				<updated>2016-12-14T22:10:37Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Алгоритм построения БПФ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform, FFT'') {{---}} метод, позволяющий вычислять [[Дискретное преобразование Фурье | дискретное преобразование Фурье]] за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Cначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;\mathrm{DFT}(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея ''разделяй и властвуй'', то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57862</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57862"/>
				<updated>2016-12-14T22:10:00Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Описание задачи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform, FFT'') {{---}} метод, позволяющий вычислять [[Дискретное преобразование Фурье | дискретное преобразование Фурье]] за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Cначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;\mathrm{DFT}(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57861</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57861"/>
				<updated>2016-12-14T22:06:12Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, получаем обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; -1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\dfrac{1}{-16i}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
-4i &amp;amp; -4i &amp;amp; -4i &amp;amp; -4i \\&lt;br /&gt;
-4i &amp;amp; -4 &amp;amp; 4i &amp;amp; 4 \\&lt;br /&gt;
-4i &amp;amp; 4i &amp;amp; -4i &amp;amp; 4i \\&lt;br /&gt;
-4i &amp;amp; 4 &amp;amp; 4i &amp;amp; -4&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a_0 = \dfrac{1}{4} (10 + 1 + 3i + 8 + 1 - 3i) = 5 \\&lt;br /&gt;
a_1 = \dfrac{1}{4} (10 + (1 + 3i)(-i) + (-1)8 + (1 - 3i)i) = 2 \\&lt;br /&gt;
a_2 = \dfrac{1}{4} (10 + (1 + 3i)(-1) + 8 + (1 - 3i)(-1)) = 4 \\&lt;br /&gt;
a_3 = \dfrac{1}{4} (10 + (1 + 3i)i + (-1)8 + (1 - 3i)(-i)) = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57858</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57858"/>
				<updated>2016-12-14T20:51:18Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, получаем обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\dfrac{1}{-16i}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
-4i &amp;amp; -4i &amp;amp; -4i &amp;amp; -4i \\&lt;br /&gt;
-4i &amp;amp; -4 &amp;amp; -1 &amp;amp; 4 \\&lt;br /&gt;
-4i &amp;amp; -1 &amp;amp; -4i &amp;amp; 4i \\&lt;br /&gt;
-4i &amp;amp; 4 &amp;amp; 4i &amp;amp; -4&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
10 \\&lt;br /&gt;
1 + 3i \\&lt;br /&gt;
8 \\&lt;br /&gt;
1 - 3i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57856</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57856"/>
				<updated>2016-12-14T20:44:01Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
y_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, получаем обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
a_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
y_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57855</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57855"/>
				<updated>2016-12-14T20:34:47Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Следствия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
y_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57854</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57854"/>
				<updated>2016-12-14T20:33:59Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Алгоритм построения БПФ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform, FFT'') {{---}} метод, позволяющий вычислять [[Дискретное преобразование Фурье | дискретное преобразование Фурье]] за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Идея заключается в том, что сначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;\mathrm{DFT}(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57853</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57853"/>
				<updated>2016-12-14T20:33:30Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Алгоритм построения БПФ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform, FFT'') {{---}} метод, позволяющий вычислять [[Дискретное преобразование Фурье | дискретное преобразование Фурье]] за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Идея заключается в том, что сначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;DFT(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;DFT(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathrm{DFT}(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57852</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57852"/>
				<updated>2016-12-14T20:33:15Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform, FFT'') {{---}} метод, позволяющий вычислять [[Дискретное преобразование Фурье | дискретное преобразование Фурье]] за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Идея заключается в том, что сначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;DFT(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;DFT(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;DFT(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57851</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57851"/>
				<updated>2016-12-14T20:30:38Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Описание задачи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform (FFT)'') {{---}} это метод, позволяющий вычислять дискретное преобразование Фурье за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Идея заключается в том, что сначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;DFT(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;DFT(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;DFT(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;DFT(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57850</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57850"/>
				<updated>2016-12-14T20:30:01Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Применение ДПФ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
y_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57849</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57849"/>
				<updated>2016-12-14T20:29:47Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Применение ДПФ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n\logn)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
y_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57848</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57848"/>
				<updated>2016-12-14T20:27:39Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Алгоритм построения обратного БПФ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform (FFT)'') {{---}} это метод, позволяющий вычислять дискретное преобразование Фурье за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Идея заключается в том, что сначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;DFT(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;DFT(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;DFT(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;DFT(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{InvDFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57847</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57847"/>
				<updated>2016-12-14T20:27:21Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Алгоритм построения обратного БПФ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform (FFT)'') {{---}} это метод, позволяющий вычислять дискретное преобразование Фурье за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Идея заключается в том, что сначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;DFT(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;DFT(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;DFT(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;DFT(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1})&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично прямому ДПФ, по принципу ''разделяй и властвуй'' посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57844</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57844"/>
				<updated>2016-12-14T20:20:04Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Следствия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}\left(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1)\right)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
y_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57843</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57843"/>
				<updated>2016-12-14T20:17:44Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* ДПФ в модульной арифметике */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют [[Группа | группу]], то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
y_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57842</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57842"/>
				<updated>2016-12-14T20:17:10Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform, DFT'') многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{InvDFT}(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = \mathrm{InvDFT}(\mathrm{DFT}(A) \times \mathrm{DTF}(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют группу, то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\mathrm{DFT}(\mathrm{DFT}(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{DFT}(a_0, a_1, a_{n-1}) = \mathrm{InvDFT}(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;\mathrm{DFT}&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
y_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Аналитическая теория чисел]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B_%D0%B8_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D0%B8_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=57841</id>
		<title>Алгоритмы алгебры и теории чисел</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B_%D0%B8_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D0%B8_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=57841"/>
				<updated>2016-12-14T20:14:13Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Лекция - Аналитическая теория чисел */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Лекция - Классы чисел и основная теорема арифметики ==&lt;br /&gt;
* [[Классы чисел]]&lt;br /&gt;
* [[Натуральные и целые числа]]&lt;br /&gt;
* [[Простые числа]]&lt;br /&gt;
* [[Наибольший общий делитель]]&lt;br /&gt;
* [[Основная теорема арифметики]]&lt;br /&gt;
* [[Теоремы о простых числах]]&lt;br /&gt;
=== Практика - Разложение на множители и длинная арифметика ===&lt;br /&gt;
* [[Системы счисления]]&lt;br /&gt;
* [[Арифметика чисел в b-ичной системе счисления (Длинная арифметика)]]&lt;br /&gt;
* [[Разложение на множители (факторизация)]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Основные элементы теории чисел ==&lt;br /&gt;
* [[Сравнения, система вычетов, решение линейных систем по модулю]]&lt;br /&gt;
* [[Китайская теорема об остатках]]&lt;br /&gt;
* [[Теорема Ферма]]&lt;br /&gt;
* [[Теорема Вильсона]]&lt;br /&gt;
* [[Мультипликативность функции, свертка Дирихле]]&lt;br /&gt;
* [[Функция Эйлера]]&lt;br /&gt;
* [[Количество делителей, сумма делителей]]&lt;br /&gt;
* [[Функция Мебиуса]]&lt;br /&gt;
&lt;br /&gt;
=== Практика - Основные алгоритмы теории чисел ===&lt;br /&gt;
* [[Решето Эратосфена]]&lt;br /&gt;
* [[Быстрое возведение в степень]]&lt;br /&gt;
* [[Умножение по Монтгомери]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Основы теории групп ==&lt;br /&gt;
* [[Полугруппа]], [[моноид]], [[группа]]&lt;br /&gt;
* [[Абелева группа]], [[Конечная группа]]&lt;br /&gt;
* [[Гомоморфизм групп]], [[изоморфизм групп]]&lt;br /&gt;
* [[Подгруппа]], [[нормальная подгруппа]]&lt;br /&gt;
* [[Порядок элемента группы]], [[циклическая группа]], [[конечно порожденная группа]]&lt;br /&gt;
* [[Регулярное представление группы]]&lt;br /&gt;
* [[Теорема о подгруппах циклической группы]]&lt;br /&gt;
* [[Смежные классы]], [[теорема Лагранжа]], [[факторгруппы]]&lt;br /&gt;
=== Практика - Основы теории групп ===&lt;br /&gt;
* [[Вычисление порядка элемента в группе]]&lt;br /&gt;
* [[Вычисление порядка перестановки в группе перестановок]]&lt;br /&gt;
* [[Дискретное логарифмирование в группе]]&lt;br /&gt;
* [[Действие группы на множестве]]&lt;br /&gt;
* [[Лемма Бернсайда, задача о числе ожерелий]]&lt;br /&gt;
* [[Представление групп]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Основы теории колец ==&lt;br /&gt;
*[[Определение кольца, подкольца, изоморфизмы колец]]&lt;br /&gt;
*[[Делители нуля, области целостности]]&lt;br /&gt;
*[[Единицы (обратимые элементы), группа обратимых элементов]]&lt;br /&gt;
*[[Неразложимые элементы, ассоциированные элементы и разложение на множители в целостных кольцах]]&lt;br /&gt;
*[[Евклидовы кольца]]&lt;br /&gt;
=== Практика - Арифметика полиномов от одной переменной над полем ===&lt;br /&gt;
&lt;br /&gt;
== Лекция - Основы теории полей ==&lt;br /&gt;
* [[Определение поля и подполя, изоморфизмы полей]]&lt;br /&gt;
* [[Примеры полей]]&lt;br /&gt;
* [[Мультипликативная группа поля]]&lt;br /&gt;
* [[Расширения полей]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Первообразные корни и квадратичные вычеты ==&lt;br /&gt;
* [[Теорема о цикличности мультипликативной группы поля Z/pZ|Теорема о цикличности мультипликативной группы поля &amp;lt;tex&amp;gt;\mathbb{Z}/p\mathbb{Z}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Первообразные корни]]&lt;br /&gt;
** [[Существование первообразных корней по определенным модулям|Теорема о существовании первообразных корней по модулям вида &amp;lt;tex&amp;gt;2,4,p^n,2\cdot p^n&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Квадратичные вычеты|Квадратичные вычеты, количество квадратичных вычетов по простому модулю]]&lt;br /&gt;
** [[Символ Лежандра, критерий Эйлера]]&lt;br /&gt;
** [[Теорема о (((p-1)/2)!)^2=-1(mod p)|Теорема о &amp;lt;tex&amp;gt;((\frac{p-1}{2})!)^2\equiv -1 (mod ~p)&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;p=4\cdot k+1&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
** [[Лемма Гаусса для вычисления квадратичного характера числа по простому модулю]]&lt;br /&gt;
=== Практика - Первообразные корни и квадратичные вычеты ===&lt;br /&gt;
&lt;br /&gt;
== Лекция - Квадратичные вычеты ==&lt;br /&gt;
*[[Квадратичный закон взаимности]]&lt;br /&gt;
*[[Символ Якоби и его свойства]]&lt;br /&gt;
*[[Обобщенный квадратичный закон взаимности]]&lt;br /&gt;
*[[Алгоритм вычисления символа Якоби]]&lt;br /&gt;
=== Практика - Вероятностные тесты чисел на простоту ===&lt;br /&gt;
*[[Тест Ферма проверки чисел на простоту, числа Кармайкла]]&lt;br /&gt;
*[[Тест Соловея-Штрассена]]&lt;br /&gt;
*[[Тест Миллера-Рабина]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Аналитическая теория чисел ==&lt;br /&gt;
* [[Факты из математического анализа]]&lt;br /&gt;
* [[Теорема Чебышёва]]&lt;br /&gt;
* [[Постулат Бертрана]]&lt;br /&gt;
* [[Уточнение констант в теореме Чебышёва]]&lt;br /&gt;
* [[Сумма обратных к простым]]&lt;br /&gt;
* [[Асимптотический закон распределения простых чисел]]&lt;br /&gt;
* [[Дискретное преобразование Фурье]]&lt;br /&gt;
* [[Быстрое преобразование Фурье]]&lt;br /&gt;
=== Практика - Вычисление &amp;lt;math&amp;gt;\pi(x)&amp;lt;/math&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
== Лекция - Цепные (непрерывные) дроби и уравнение Пелля ==&lt;br /&gt;
* [[Цепная дробь]]&lt;br /&gt;
** [[Связь цепных дробей и алгоритма Евклида]]&lt;br /&gt;
** [[Сходимость цепных дробей]]&lt;br /&gt;
** [[Цепные дроби как приближение к числу]]&lt;br /&gt;
** [[Квадратичная иррациональность]]&lt;br /&gt;
** [[Периодичность цепных дробей]]&lt;br /&gt;
** [[Цепные дроби для sqrtd и квадратичных иррациональностей|Цепные дроби для &amp;lt;tex&amp;gt;\sqrt{d}&amp;lt;/tex&amp;gt; и квадратичных иррациональностей]]&lt;br /&gt;
* [[Уравнение Пелля]]&lt;br /&gt;
* [[Представление простых в виде суммы двух квадратов]]&lt;br /&gt;
&lt;br /&gt;
== Лекция - Конечные поля ==&lt;br /&gt;
=== Практика - Методы разложения полиномов на множители над конечными полями ===&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57829</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57829"/>
				<updated>2016-12-14T18:21:22Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform (DFT)'') {{---}} многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} это вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
InvDFT(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = InvDFT(DFT(A) \times DTF(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют группу, то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;DFT(DFT(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof= '''Доказательство:'''&lt;br /&gt;
&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, a_{n-1}) = InvDFT(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример == &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; для полинома степени &amp;lt;tex&amp;gt;n = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A(x) = 5 + 2x + 4x^2 - x^3&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда подставляя значения &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;e^{2i\frac{\pi k}{4}}&amp;lt;/tex&amp;gt; получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
x_0 = \ \ 1 \\&lt;br /&gt;
x_1 = \ \ 2 \\&lt;br /&gt;
x_2 = \ \ 4 \\&lt;br /&gt;
x_3 = -1&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим матрицу Вандермонда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\&lt;br /&gt;
1 &amp;amp; i &amp;amp; -1 &amp;amp; -i \\&lt;br /&gt;
1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1 \\&lt;br /&gt;
1 &amp;amp; -i &amp;amp; 1 &amp;amp; i&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
5 \\&lt;br /&gt;
2 \\&lt;br /&gt;
4 \\&lt;br /&gt;
-1&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
y_3&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем вектор значений многочлена &amp;lt;tex&amp;gt;(y_0, y_1, y_2, y_3)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_0 = 1 \cdot 5 \ + \ 1 \cdot 2 \ + \ 1 \cdot 4 \ -1 \ = \ 10 \\&lt;br /&gt;
y_1 = 1 \cdot 5 \ + \ 2i \ - \ 4 \ + \ i \ = \ 1 \ + \ 3i \\&lt;br /&gt;
y_2 = 1 \cdot 5 \ - \ 2 \ + \ 4 \ + 1 \ = \ 8 \\&lt;br /&gt;
y_3 = 1 \cdot 5 \ - \ 2i \ - \ 4 \ - \ i = 1 \ - \ 3i &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получаем: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(A) = (10, 1 + 3i, 8, 1 - 3i)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57103</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57103"/>
				<updated>2016-12-07T13:17:28Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Алгоритм построения обратного БПФ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform (FFT)'') {{---}} это метод, позволяющий вычислять дискретное преобразование Фурье за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Идея заключается в том, что сначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;DFT(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;DFT(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;DFT(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;DFT(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1}&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{-kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57007</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57007"/>
				<updated>2016-12-05T21:34:57Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform (DFT)'') {{---}} многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} это вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
InvDFT(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = InvDFT(DFT(A) \times DTF(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют группу, то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Следствия ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;DFT(DFT(a_0, a_1, \ldots , a_{n-1})) = \dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof= '''Доказательство:'''&lt;br /&gt;
&lt;br /&gt;
Применим к обеим частям обратное ДПФ и получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, a_{n-1}) = InvDFT(\dfrac{1}{n} (a_0, a_{n-1}, \ldots , a_1))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что слева у нас находится вектор значений многочлена с коэффициентами &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; и обозначим его за &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt;. Заметим, что:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь рассмотрим правую часть. По определению, справа у нас находится вектор коэффициентов многочлена со значениями &amp;lt;tex&amp;gt;\left( \dfrac{1}{n} a_0, \dfrac{1}{n} a_{n-1}, \ldots , \dfrac{1}{n} a_1 \right)&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;x = \omega_n^k&amp;lt;/tex&amp;gt;. Обозначим его как &amp;lt;tex&amp;gt;(y_0 ', y_1 ', \ldots , y_{n-1} ')&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k '= \dfrac{1}{n} \sum\limits_{j=0}^{n} z_j e^{-i\frac{2\pi k}{n} j},&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_0 \\&lt;br /&gt;
z_1 \\&lt;br /&gt;
z_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
z_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\dfrac{a_0}{n}\\&lt;br /&gt;
\dfrac{a_{n-1}}{n}\\&lt;br /&gt;
\dfrac{a_{n-2}}{n}\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
\dfrac{a_1}{n}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, подставляя значения &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 e^0 + \sum\limits_{j=1}^{n} a_j e^{-i\frac{2\pi k}{n} (n - j)} = a_0 + \sum\limits_{j=1}^{n} a_j e^{-i 2\pi k} e^{i\frac{2\pi k}{n} j}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А так как &amp;lt;tex&amp;gt;e^{-i 2\pi k} = \left(\dfrac{1}{e^{i 2\pi}}\right)^k = 1&amp;lt;/tex&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
y_k ' = a_0 + \sum\limits_{j=1}^{n} a_j e^{i \frac{2\pi k}{n} j} = \sum\limits_{j=0}^{n} a_j e^{i\frac{2\pi k}{n} j} = y_k,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57006</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57006"/>
				<updated>2016-12-05T20:36:28Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform (DFT)'') {{---}} многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} это вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
InvDFT(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = InvDFT(DFT(A) \times DTF(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют группу, то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 \ \mod p,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne 1 \ \mod p, 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Утверждения ==&lt;br /&gt;
{{&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57005</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=57005"/>
				<updated>2016-12-05T20:27:23Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform (FFT)'') {{---}} это метод, позволяющий вычислять дискретное преобразование Фурье за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Идея заключается в том, что сначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;DFT(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;DFT(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;DFT(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;DFT(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1}&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56941</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56941"/>
				<updated>2016-12-04T16:43:55Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Алгоритм построения обратного БПФ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform (FFT)'') {{---}} это метод, позволяющий вычислять дискретное преобразование Фурье за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Идея заключается в том, что сначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;DFT(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;DFT(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;DFT(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;DFT(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1}&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{kj}} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56940</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56940"/>
				<updated>2016-12-04T16:42:53Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* Алгоритм построения БПФ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform (FFT)'') {{---}} это метод, позволяющий вычислять дискретное преобразование Фурье за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Идея заключается в том, что сначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;DFT(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;DFT(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;DFT(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;DFT(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1}&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{kj}} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56938</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56938"/>
				<updated>2016-12-04T16:30:32Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: /* ДПФ в модульной арифметике */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform (DFT)'') {{---}} многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} это вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
InvDFT(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = InvDFT(DFT(A) \times DTF(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют группу, то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 (mod p),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne (mod p), 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56928</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56928"/>
				<updated>2016-12-04T16:13:12Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform (FFT)'') {{---}} это метод, позволяющий вычислять дискретное преобразование Фурье за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Идея заключается в том, что сначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
* &amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;DFT(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;DFT(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;DFT(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;DFT(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1}&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{kj}} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Дискретное преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56927</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56927"/>
				<updated>2016-12-04T16:12:16Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform (DFT)'') {{---}} многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} это вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
InvDFT(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = InvDFT(DFT(A) \times DTF(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют группу, то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 (mod p),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne (mod p), 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56924</id>
		<title>Дискретное преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56924"/>
				<updated>2016-12-04T16:10:32Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: Новая страница: «{{Определение |definition= '''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform (DFT)'') {{---}} ...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Дискретное преобразование Фурье''' (англ. ''Discrete Fourier Transform (DFT)'') {{---}} многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; называют вектор значений этого многочлена в точках &amp;lt;tex&amp;gt;x = \omega_{n,k}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
DFT(a_0, a_1, \ldots , a_{n-1}) = (y_0, y_1, \ldots , y_{n-1}) = (A(\omega_{n,0}), A(\omega_{n,1}), \ldots , A(\omega_{n,n-1}))&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
 = (A(\omega_n^0), A(\omega_n^1), \ldots , A(\omega_n^{n-1})),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\omega_{n,k} = e^{i\frac{2\pi k}{n}}&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt; k-&amp;lt;/tex&amp;gt;ый из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; комплексных корней из единицы. &amp;lt;tex&amp;gt;\omega_n = \omega_{n,1} = e^{i\frac{2\pi}{n}}&amp;lt;/tex&amp;gt; называется главным значением корня &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы, а все остальные корни являются его степенями: &amp;lt;tex&amp;gt;\omega_{n,k} = (\omega_n)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Обратное дискретное преобразование Фурье''' (англ. ''Inverse DFT'') для вектора значений многочлена &amp;lt;tex&amp;gt;A(\omega_n)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} это вектор коэффициентов этого многочлена &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
InvDFT(y_0, y_1, \ldots , y_{n-1}) = (a_0, a_1, \ldots , a_{n-1}).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ДПФ ==&lt;br /&gt;
Дискретное преобразование Фурье используют для быстрого перемножения двух полиномов &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы получить произведение двух многочленов за время, меньшее чем &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, необходимо сначала посчитать &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; обоих многочленов. Так как при умножении двух многочленов их значения просто перемножаются в каждой точке. Следовательно, если &amp;lt;tex&amp;gt;DFT&amp;lt;/tex&amp;gt; {{---}} это вектор значений многочлена, то мы можем получить значение произведения двух многочленов, просто перемножив их ДПФ. Значит, чтобы получить коэффициенты полученного многочлена, применим обратное ДПФ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A \times B = InvDFT(DFT(A) \times DTF(B)).&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как ДПФ многолчена {{---}} это вектор его значений, значит, перемножение двух ДПФ требует только &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; операций. Осталось только вычислять ДПФ и обратное ДПФ за время &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;. Для этого используем [[Быстрое преобразование Фурье| быстрое преобразование Фурье]].&lt;br /&gt;
&lt;br /&gt;
== ДПФ в модульной арифметике ==&lt;br /&gt;
В основе ДПФ используются комплексные числа, являющиеся корнями &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы. Для эффективного вычисления использовались свойства комплексных корней, которые образуют группу, то есть степень одного корня всегда является другим корнем. Среди них есть корень, называемый примитивным.&lt;br /&gt;
&lt;br /&gt;
Однако, то же верно и в случае корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы в модульной арифметике. Не для любого модуля &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различных корней, но такие модули все же существуют. Необходимо найти примитивный корень, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^n = 1 (mod p),&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
(\omega_n)^k \ne (mod p), 1 \leqslant  k &amp;lt; n.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и с комплексными корнями, остальные &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; корней &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой степени из единицы по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; можно получить как степени примитивного корня &amp;lt;tex&amp;gt;\omega_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Быстрое преобразование Фурье]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Дискретное преобразование Фурье]&lt;br /&gt;
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56905</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56905"/>
				<updated>2016-12-04T14:30:45Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform (FFT)'') {{---}} это метод, позволяющий вычислять дискретное преобразование Фурье за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Идея заключается в том, что сначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
* &amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;DFT(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;DFT(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;DFT(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;DFT(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots , y_{n-1})&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ДПФ в матричном виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда можно найти вектор &amp;lt;tex&amp;gt;(a_0, a_1, \ldots ,a_{n-1}&amp;lt;/tex&amp;gt;, умножив вектор &amp;lt;tex&amp;gt;(y_0, y_1, \ldots ,y_{n-1})&amp;lt;/tex&amp;gt; на матрицу обратную матрице Вандермонда (матрица слева).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
a_0 \\&lt;br /&gt;
a_1 \\&lt;br /&gt;
a_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
{\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^1 &amp;amp; \omega_n^2 &amp;amp; \ldots &amp;amp; \omega_n^{n-1} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^2 &amp;amp; \omega_n^4 &amp;amp; \ldots &amp;amp; \omega_n^{2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{n-1} &amp;amp; \omega_n^{2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}}^{-1}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
y_0 \\&lt;br /&gt;
y_1 \\&lt;br /&gt;
y_2 \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{n-1}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\dfrac{1}{n}&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \omega_n^0 &amp;amp; \ldots &amp;amp; \omega_n^0\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-1} &amp;amp; \omega_n^{-2} &amp;amp; \ldots &amp;amp; \omega_n^{-(n-1)} \\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-2} &amp;amp; \omega_n^{-4} &amp;amp; \ldots &amp;amp; \omega_n^{-2(n-1)} \\&lt;br /&gt;
\vdots&amp;amp; \vdots &amp;amp; \vdots &amp;amp;\ddots &amp;amp; \vdots\\&lt;br /&gt;
\omega_n^0 &amp;amp; \omega_n^{-(n-1)} &amp;amp; \omega_n^{-2(n-1)} &amp;amp;\ldots &amp;amp; \omega_n^{-(n-1)(n-1)}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем формулу для &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_k = \dfrac{1}{n}\sum \limits_{j=0}^{n-1} {y_j \omega_n^{kj}} &amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56190</id>
		<title>Быстрое преобразование Фурье</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=56190"/>
				<updated>2016-11-22T20:23:01Z</updated>
		
		<summary type="html">&lt;p&gt;188.243.128.31: Новая страница: «{{Определение |definition= '''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform (FFT)'') {{---}} это м...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Быстрое преобразование Фурье''' (англ. ''Fast Fourier Transform (FFT)'') {{---}} это метод, позволяющий вычислять дискретное преобразование Фурье за время &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм построения БПФ ==&lt;br /&gt;
Метод основывается на том, что степени одних комплексных корней единицы в степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; дают другие. &lt;br /&gt;
&lt;br /&gt;
Идея заключается в том, что сначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.&lt;br /&gt;
&lt;br /&gt;
Пусть имеется многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n &amp;gt; 1, n = 2^t&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделим &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:&lt;br /&gt;
* &amp;lt;tex&amp;gt; A_0(x) = a_0 x^0 + a_2 x^1 + \ldots + a_{n-2} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; A_1(x) = a_1 x^0 + a_3 x^1 + \ldots + a_{n-1} x^{\frac{n}{2} - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многочлен &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt; получается из &amp;lt;tex&amp;gt;A_0(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_1(x)&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A(x) = A_0(x^2) + xA_1(x^2) \ \ \ \ \  (1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным &amp;lt;tex&amp;gt;DFT(A_0)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1)&amp;lt;/tex&amp;gt; за линейное время вычислить &amp;lt;tex&amp;gt;DFT(A)&amp;lt;/tex&amp;gt;. Так как здесь используется идея &amp;quot;разделяй и властвуй&amp;quot;, то асимптотическая оценка будет &amp;lt;tex&amp;gt;O(nlogn)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;DFT(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DFT(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}&amp;lt;/tex&amp;gt;. Найдем вектор значений &amp;lt;tex&amp;gt;DFT(A) = \{y_k\}^{n-1}_{k=0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Из &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; получаем значения для первой половины коэффициентов:&lt;br /&gt;
&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&lt;br /&gt;
* Для второй половины получаем:&lt;br /&gt;
&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A(\omega_n^{k+\frac{n}{2}})= A_0(\omega_n^{2k+n})+ \omega_n^{k+\frac{n}{2}} A_1(\omega_n^{2k+n})= &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A_0(\omega_n^{2k} \omega_n^{n})+ \omega_n^k \omega_n^{\frac{n}{2}} A_1(\omega_n^{2k} \omega_n^n) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \omega_n^n = 1, \omega_n^{\frac{n}{2}} = -1&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= A_0(\omega_n^{2k})- \omega_n^k A_1(\omega_n^{2k})= y_k^0- \omega_n^k y_k^1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y_k = y_k^0 + \omega^k_n y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y_{k+\frac{n}{2}}= y_k^0- \omega_n^k y_k^1, \ \ k = 0 \ldots \dfrac{n}{2} - 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения обратного БПФ == &lt;br /&gt;
Пусть вектор &amp;lt;tex&amp;gt;y_0, y_1, \ldots , y_{n-1}&amp;lt;/tex&amp;gt; {{---}} значения многочлена &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; в точках &amp;lt;tex&amp;gt;n = \omega_n^k&amp;lt;/tex&amp;gt;. Необходимо, по данному вектору восстановить коэффициенты &amp;lt;tex&amp;gt;(a_0, a_1, \ldots , a_{n-1})&amp;lt;/tex&amp;gt; многочлена.&lt;/div&gt;</summary>
		<author><name>188.243.128.31</name></author>	</entry>

	</feed>