ЛКШ 2018, 10-й день, FFT (Сергей Копелиович)
- Длинная арифметика
- Хранение от мл к ст. Сложение, вычитание, умножение/деление на короткое. Всё за O(n). BASE = 109.
- Умножение и деление многочленов за O(nm)
- Умножение и деление за O(nm/k2), где BASE = 10k.
- Двоичная арифметика: умножение, деление, gcd
- FFT
- Ликбез по комплексным числам: умножение, деление, векторное представление, корни из единицы
- Схема умножение: 2n ≥ k1 + k2 + 1, вычисление значения многочленов в точке, интерполяция
- Вопрос: можно ли такой схемой делить? (ответ: только нацело)
- FFT: рекурсивная схема
- FFT: рекурсивный псевдокод
- FFT: нерекурсивный оптимальный псевдокод (удаляем обратный ход рекурсии, разворачиваем циклы)
- Вычисление и хранение корней (root[k+j] = j-й корень по основания 2k)
- Обратное FFT, сводим к прямому
- Уможение чисел: два веществененных в одном
- Уможение чисел: выбор системы счисления (ответ = 105)
- Задачи
- Скалярные проиозведение
- Поиск в тексте с ? строки с ?
- Перевод из одной системы счисления в другую за O(nlog2n)
- Поиск картинки, минимизация среднеквадратичного отклонения
- Дополнение
- Умножение многочленов с коэффициентами до 109 по модулю 109+7 за 3 FFT
- Умножение не в комплесных, а в целых по модулю