Быстрые операции над многочленами ч.1. (6 февраля 2025)
- Задачи на производящие функции
- 3-SUM за O(SlogS)
- Счастливые билеты
- n! за O(n1/2) ⇒ факторизация за n1/4
- Рюкзак за O(SlogS + n) (затравка)
- Операции с многочленами через разделяйку
- Перевод из одной системы в другую
- Деление
- Multipoint Evaluation
- Any points Interpolation
- За сколько вообще можно умножать многочлены?
- Над F2: bitset
- Над кольцом: Карацуба
- Над F2: спарим bitset и Карацубу
- Вспоминаем FFT
- Общая схема: FFT(A), FFT(B), умножить поточечно, FFT-1
- Комплексные корни из единицы: картинка, группа, умножения и степени
- Рекурсивное FFT: идея + реализация
- Задача на понимания 1: считаем 2n − nlogn или nlog2n?
− Перерыв −
- Более подробный план того, что выше:
- n! mod m и факторизация целых чисел
- k = floor(sqrt(n)), рассмотрим P(x) = x(x+k)(x+2k)...(x+k(k-1))
- P(1)P(2)P(3)...P(k) = (k2)!, чтобы дополнить до n!, сделаем руками O(k) умножений, время работы: O(n1/2log2n)
- Посчитать P(x) мы можем через разделяй и властвуй за O(klog2k)
- Умножение нужно теперь делать не в C, а по модулю m. Умножим в Z (то же, что R, что C), в конце возьмём по модулю m.
- Факторизация. min d: gcd(d!, n) != 1 - минимальный делитель n. Можно бинпоиском, можно "двоичными подъёмами" за O(n1/4log2n)
- Разделяй и властвуй для интерполяции
- Ньютон: (x1...xn-1, y1...yn-1) → P(x) → P(x) + Q(x)/Q(xn)*(yn - P(xn)), где Q(x) = (x-x1)(x-x2)...(x-xn-1)
- Разделяй и властвуй: (x1...xn/2, y1...yn/2) → P(x) → P(x) + Q(x)*S(x), (x-x1)(x-x2)...(x-xn/2), а
значения S(x) в точках xn/2+1...xn вычисляются как S(xi) = (yi - P(xi)) / Q(xi)
- Где почитать? Лекция от sankowski