Вводная задача.

  1. DP на дереве.
    1. Найти число способов выбрать в дереве K вершин так, чтобы никакие две не были смежны.
    2. Решение за O(N3). Сведение произвольного дерева к бинарному.
    3. Решение за O(N2logN) = быстрое перемножение многочленов.

Дискретное Преобразование Фурье (ДПФ, БПФ)

  1. БПФ в комплексных числах
    1. Умножеие = экстерполяция + умножение за O(n) + интерполяция
    2. Длинное целое число можно рассматривать, как многочлен Z[x], x from R,C,Z/pZ
    3. Экстерполяция: посчитать значения многочлена в точках A0,A1,A2,...,A[2k-1]. Интерполяция: по значениям в точках восстановить многочлен.
    4. Фокус БПФ в том, чтобы экстерполяция и интерполяция работали за ONlogN). Точки должны образовывать циклическую группу по умножению порядка 2k.
    5. Рекурсивная процедура (псевдокод).
  2. Обратное БПФ в комплексных числах
    1. 1 + a + a2 + ... + an = 0
    2. Записываем уравнения, видим значения нового многочлена в точках.
  3. Быстрая реализация БПФ в комплексных числах
    1. Рекурсия - не самый тонкий момент (поэтому нерекурсивную реализацию не трогаем, как не нужную).
    2. Все корни из 1 должны быть предодсчитаны. Их всего N штук, на их вычисление уходит O(N) комплексных умножений или O(N) sin и cos.
    3. Внутренний цикл должен быть длины не N, а N/2
    4. База для N=2 (не 1), при желании можно даже для 4-х.
  4. БПФ для Z/pZ
    1. p = p0*2k + 1, например 3*218 + 1
    2. Ищем образующую группы (после этого можно вбить ее в константы и не считать каждый раз).
    3. N = p - 1, a - образующая, (a2)N/2 = 1
  5. Not read Задачи на БПФ
    1. Not read Выбрать циклический сдвиг A[] : (A[],B[]) = min (SRM 1000, 2009)
    2. Not read Найти подматрицу в матрице с min квадратичным откланением (Всесиб-2009)
    3. Not read В массиве C[]. Посчитать число троек x,x-a,x+a: С[x] == 1 && C[x-a] == 1 && C[x+a] == 1 (PTZ-Summer-2010)
    4. Not read В матрице NxN найти матожидание периметра треугольника. Решение за O(N3). (PTZ-Summer-2010)

Другие методы умножения чисел

  1. Not read Карацуба
    1. Not read Метод 3 умножения вместо 4-х. Оценка времени Nlog_23
    2. Not read Метод 6 умножений вместо 9-и. Получается хуже...
    3. Not read Реализация. N <= 16. Аккуратное выделение памяти. На Си. На Джаве.
  2. Not read Смешной метод с интерполяцией и экстерполяцией за O(N1+eps)
  3. Not read Метод If-а. Если числа не более 230? А если 260? А если 2100?
    1. Not read Пример задачи. В каждой строке файла посчитать сумму чисел. Числа до 1018.
    2. Not read Пример кода. if ((a0 += b) >= BASE) a0 -= BASE, a1++;
  4. Not read Сравнение длинных чисел.
    1. Not read Пример задачи: найти min число c данным числом делителей.
    2. Not read Логарифмируем.

Деление и извлечение корня

  1. Метод Ньютона
    1. Кастельные. x -= f(x) / f'(x).
    2. Обоснование скорости сходимости loglogEps.
  2. Деление
    1. Почему деление нельзя сделать так же, как умножение (экстерполяция + деление за O(n) + интерполяция)?
    2. Деление бинпоиском за O(N3)
    3. Not read Деление за O(N2log)
    4. Not read Деление за O(N2) : первую цифру можем вычислять за O(1).
    5. Деление за o(N2) : видимо, можно вычислять даже не 1, а 10 цифр :)
    6. Деление за O(NlogN). Применяем метод Ньютона. a=1/x
  3. Not read Корень квадратный обыкновенный.
    1. Not read Корень бинпоиском за O(N3).
    2. Not read O(N2logN) = Вычсиляем очередную цифру бинпоиском за O(NlogN)
    3. Not read Метод за O(Nsqrt(N)) с вычислением сразу многих цифр.
    4. Not read Применяем Ньютона и вновь O(NlogN). a=1/(x2)

Кое-что из теории чисел.

  1. Not read Как найти все простые числа от 1 до 109 за O(N)
  2. Not read Как для всех чисел от 1 до N создать список делителей за O(NlogN).

Решение систем линейных уравнений.

  1. Not read Слуйчай поля. Метод Гаусса.
  2. Not read Система, в которой каждое уравнение дано по своему модулю.
    1. Not read Решение для pk. Сведедние через LCM.
    2. Not read К.Т.О. поможет.
  3. Not read Система по не простому модулю M.
    1. Not read Подсчет определителя. Приведение матрицы к диагонально-трапецивидному виду.
    2. Not read Сравнения по модулю, получение решения, если нет свободных переменных.
    3. Not read Базис пространства решений. Подъем базиса.
    4. Not read Сведение исходной системы к уравнениям над коеффицентами при свободных переменных.