FFT (8-е апреля 2019)

  1. Разминка: число счастливых билетов из 2n цифр
    1. P(x) = (x0 + x1 + ... + xd)n, ответ = сумма квадратов коэффициентов P(x)
    2. N = dn ⇒ оно возведение в степень работает за O(Mul(N)) = O(NlogN)

  2. Разделяй и властвуй для интерполяции
    1. Ньютон: (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)
    2. Разделяй и властвуй: (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)

  3. Закрепление: перевод числа из 2-ичной системы в 10-ичную
    1. Разделяй и властвуй: F(a1...an) = F(a1...an/2) + 2n/1F(an/2+1...an)

  4. CRC-32
    1. Один из вариантов хеширования последовательности бит a0, a1, ... an-1 - остаток от деления многочлена A(x)*xk на G(x),
    2. где G(x) - специальный многочлен, и k = deg G.
    3. В CRC-32-IEEE-802.3 (используется в v.42, mpeg-2, png, POSIX cksum) k = 32, G(x) = 0xEDB88320 (32 бита).
    4. Вычисление взятия по модуля одним проходом за O(n) при w ≥ k

  5. Коды Рида-Соломона
    1. Пример 1: передать 1 бит по каналу, где любой 1 бит может быть заменён. 00, 11 - плохой код. 000, 111 - хороший.
    2. Пример 2: только проверка на корректность, без исправления ошибок. Передать xor.
    3. Пример 3: передать n бит. Код повторять три раза. Код частичные суммы.
    4. Критерий того, что при k ошибках всё можно однозначно декодировать: расстояния Хэмминга не менее 2k+1.
    5. Задача: хотим передать n слов из поля Fq, q > n, не более k ошибок.
    6. Какие бывают q? Чтобы было поле, q = pn. Поля простого размера - остатки по модулю. По pn - нужно найти неприводимый многочлен степени n над Fp.
    7. Входные данные - многочлен. Алгоритм кодирования - вычисление значений многочлена в произвольных n+2k точках xi.
    8. Корректность кодирования: у A1-A2 не более n-1 корней ⇒ у A1 и A2 значения хотя бы в 2k+1 точке различны
    9. Проверка наличия ошибок - интерполяция имеет степень не более n-1.
    10. Исправление ошибок: A(x) - входные данные, A'(x) - интерполяция переданного, E(x) = (x-xe1)...(x-xek) - многочлен ошибок. У B(x) = A(x)E(x) и A'(x)E(x) совпадают значения во всех n+2k точках. СЛАУ: неизвестные - коэффициенты B и E, каждая из n+2k точек даёт уравнение.
    11. Асимптотика декодирования. Гаусс O((n+k)3). Бэрликэмп-Мэсси O((n+k)2).

Автоматы (8-е апреля 2019)

  1. Определение детерминированного и недетерминированного.
  2. Детерминизация за O(2nΣ)
  3. Минимизация за O(n2Σ) (прообраз алгоритма Хопкрофта)