Дополнительные задания
- Реализовать энумеративное кодирование для всех перестановок длины \(n\).
- Реализовать энумеративное кодирование для битовых строк с числом нулей \(p\) и числом единиц \(q\).
- Реализовать энумеративное кодирование для строк над алфавитом размера \(k\) и фиксированной статистикой \(n_1, n_2, \ldots, n_k\)
- Реализовать энумеративное кодирование троек \((a, b, c)\), где \(a < b < c\) и \(0 \leq a, b, c < N\)
- Реализовать BWT для текста (должно работать для текста размером 1MB)
- Реализовать MTF для текста
- Реализовать алгоритм LZ77
- Реализовать алгоритм LZ78
- Реализовать алгоритм LZW
- Арифметический кодер с использованием длинной арифметики (точные рациональные числа, не приближения) для кодирования битовых строк размера 1K (1024 бит).
Цель задачи — правильно реализовать алгоритм, что и будет главным условием при проверке. Достаточно реализовать консольное приложение и написать несколько тестов для разных данных. Все алгоритмы, разумеется, должны поддерживать кодирование и декодирование.