Фурье и длинка (6 мая 2016)
- FFT для умножения многочленов
- Интерполяция, экстраполяция
- Схема для быстрого умножения: экстраполяция, перемножение, интерполяция
- Экстраполяция и интерполяция за O(n2) (не думаем здесь про переполнения)
- Поле комплексных корней из единицы степени n=2k. w = e2πi/n = complex(cos(2πi/n), sin(2πi/n))
- Прямое Фурье (рекурсивная процедура)
- Обратное Фурье через прямое. Сперва формулируем результат, затем доказательство.
− Перерыв −
- Улучшения FFT
- Точность вычислений.
- Код обратного: прямое
a → f; reverse(f + 1, f + n); f /= n;
- Ускорение: свой класс
complex
. 10-20% ускорения.
- Два вещественных в одном
- Нерекурсивная реализация (разворот битовой записи)
- [skipped] Что делать, если коэффициенты не помещаются в память?
- [skipped] Предподсчёт корней. Как быстро и точно посчитать?
- [skipped] Длинная арфиметика
- [skipped] Многочлены ↔ длинные целые неотрицательные числа
- [skipped] Длинные чисел → длинные вещественные числа, числа со знаком
- [skipped] Хранение длинных чисел:
vector<int>; int num[N];
- [skipped] Сложение, вычитание, сравнение, умножение и деление на короткое.
- [skipped] Алгоритмы для умножения многочлены/чисел: квадрат, Карацуба, Фурье.
- [skipped] Деление и умножение многочленов за O(nm).
- [skipped] Двоичная арифметика: деление и gcd чисел за O(nm)
- [skipped] Деление чисел за O(nm).