Быстрые операции над многочленами ч.2. (10 февраля 2025)
- Простые вопросы про FFT
- За сколько мы умеем посчитать 2n?
- Умножение многочленов не в C
- Умножение над F2: спарим bitset и Карацубу
- Над кольцом Z/mZ, m − простое вида x*2s+1, n < 2s.
- Над Z (лучше всего по КТО для разных Z/mZ)
- Вспоминаем FFT
- Рекурсивное FFT: идея + реализация
- Предподсчёт корней root[i] = (cos,sin)
- Прямой ход рекурсии − перестановка массива коэффициентов A: F[rev[i]] = A[i], rev[i] = rev[i/2]/2 + ((i%2) << (k-1))
- Обратный ход рекурсии − FOR (s=0..k-2) { n = 2s; FOR (t=0; t<N; t+=2n) FOR (j=0; j<n; j++) { tmp = ...; F[t+j+n] = ...; F[t+j] = ...; }}
- Метод Ньютона и действия с рядами
- x → (x+a/x)/2 (корень для чисел); Картинка метода Ньютона; шаг x → x - f'/f
- Оценка скорости сходимости Ньютона
- Ньютон для чисел 1/x
- Ньютон для чисел x1/2
- Ньютон для обратного ряда
- Деление длинных чисел и извлечение корня за O(nlogn)
- Дифференцирование/интегрирование: ak → k*ak
- Логарифм ряда
- Ньютон для экспоненты
- Применения FFT
- Умножение многочленов от двух переменных xiyj (y = xn ⇒ nmlog(nm))
- Покраска в k цветов (∑I независимо xIy|I|) : предподсчитали независимые за 2n, возводим в степень k за k умножений: O(k2nn2)
- Рюкзак, subsetsum+количество: набрать ровно k предметов с суммой ровно S за O(nSlogSlogn) (разделяйка, внутри fft: T(n,S) = 2T(n/2,S) + nS*log)
- [skipped] Рюкзак, subsetsum за O~(n1/2S)
- Деление многочленов за O(nlogn)
- reverse(A) = AR, заметим, что (BC)R = BRCR
- Определение деления новыми словами. A, B → C: AR = (BC)R mod xn
- Обращение ряда: получаем n первых членов обратного к A, за O(Mul(n)) AA-1 = 1 mod xn
- Получаем CR = (BR)-1AR (обращение ряда)