Кодирование и автоматы (6 февраля 2024)
- CRC-32
- Один из вариантов хеширования последовательности бит a0, a1, ... an-1 − остаток от деления многочлена A(x)*xk на G(x),
где G(x) -- специальный многочлен, и k = deg G.
- В CRC-32-IEEE-802.3 (используется в v.42, mpeg-2, png, POSIX cksum) k = 32, G(x) = 0xEDB88320 (32 бита).
- Вычисление взятия по модуля одним проходом за O(n) при w ≥ k
- Даны CRC-32(A) и CRC-32(B). Найдите CRC-32(A XOR B)
- Зная CRC-32(A), посчитайте за O(1) CRC-32(A1)
- Коды Рида-Соломона
- Пример 1: передать 1 бит по каналу, где любой 1 бит может быть заменён. 00, 11 − плохой код. 000, 111 − хороший.
- Пример 2: только проверка на корректность, без исправления ошибок. Передать xor.
- Пример 3: передать n бит. Код повторять три раза. Код частичные суммы.
- Критерий того, что при k ошибках всё можно однозначно декодировать: расстояния Хэмминга не менее 2k+1.
- Коды Рида-Соломона.
- Задача: хотим передать n слов из поля Fq, q > n, не более k ошибок.
- Какие бывают q, чтобы ∃ поле Fq? q = pn. Поля простого размера − остатки по модулю; для размера pn − нужно найти неприводимый многочлен степени n над Fp.
- F232 − конечные поля имеют размер pn, размера p это просто остатки по модулю p (Z/pZ), размера pn (232) − остатки по модулю неприводимого многочлена над Fp степени n. F232 = F2[x] / (x32 + x22 + x2 + x + 1).
- Входные данные − многочлен. Алгоритм кодирования − вычисление значений многочлена в произвольных n+2k точках xi.
- Корректность кодирования: у A1-A2 не более n-1 корней ⇒ у A1 и A2 значения хотя бы в 2k+1 точке различны
- Проверка наличия ошибок − интерполяция имеет степень не более n-1.
- Исправление ошибок: 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 точек даёт уравнение.
- Асимптотика декодирования. Гаусс O((n+k)3). Бэрликэмп-Мэсси O((n+k)2).
- Рид-Соломон. Где же ответ? B = A*E, A'*E, неизвестные - коэффициенты B и E
- Сверхбыстрая линейная рекуррента
- Фибоначчи за O(logn): возведение матрицы в степень
- Линейная рекурренты длины k за O(k3logn): возведение матрицы в степень
- Линейная рекурренты длины k за O(klogklogn): xn mod A(x), где A(x) = xk - ∑xk-iai
- ??? Бэрликэмп-Мэсси O((n+k)2).
− Перерыв −
- Автоматы. База.
- Определение детерминированного и недетерминированного.
- Принятие строки детерминированным O(|s|) и недетерминированным O(m|s|).
- Детерминизация: новые вершины = множества 2n.
- Эквивалентность и минимизация
- Проверка эквивалентности двух автоматов: очередь пар разных состояний O(m2).
- Минимизация автомата: правые контексты, разбиение вершин на классы эквивалентности, корректность определения мин автомата.
- Минимизация автомата: алгоритм за O(nm) перебором рёбер "вперёд" (n split-ов).
- Суффиксный автомат: прелюдия, мы уже почти понимаем что это и как это строить (минимизация суф. дерева). Он линейный (2n вершин, 3n рёбер).
- Проверка эквивалентности через минимизацию: попадут ли в один класс s1 и s2.
- Минимизация через детерминизацию (Алгоритм Бржозовского): Amin = d(r(d(r(A)))) = drdrA. Подходит для недетерминированных. [paper].
- Хопкрофт: Минимизация за O(nklogn)
- Замыкание автомата до полного ⇒ m = nk.
- Алгоритм за O(nm) −- переделываем на перебор рёбер "назад".
- Лемма: делить нужно только по любой одной из половин ⇒ по меньшей.
- Время работы: каждая вершина перекрасится ≤logn раз ⇒ O(mlogn).
- Реализация: Split(class, char) за линию с перекраской меньшей половины каждого затронутого split-ом класса.
- Изоморфность
- Изоморфность двух автоматов за O(m1+m2).
- Проверка изоморфности минимальному за O((n1+n2)k).