Задания для самостоятельного выполнения

Реализуйте на любом языке программирования программу-архиватор, выполняющую упаковку и распаковку файла. Программа должна отображать степень сжатия:

$$ SSR = \left( 1 - \frac{S_{comp}}{S_{src}} \right) \cdot 100 \%, $$ где \(S_{comp}\) - размер сжатого файла, \(S_{src}\) - размер исходного файла.

Исходный и распакованный файл сравнить с помощью diff.

Бонусные баллы начисляются за:

  • Cамый быстрый алгоритм сжатия в своём классе

  • Cамый эффективный алгоритм сжатия в своём классе

Алгоритмы тестировать на файле из 10000 уникальных строк по 32 символа из всех доступных символов, сгенерированном на random.org

Варианты заданий

  1. LZ77. Война и мир.

  2. BWT+RLE. Геном домашней кошки.

  3. Huffman. Произвольная книга из симулятора Вавилонской библиотеки.

  4. Vitter. PPM файл. Формат PPM.

  5. BWT+LZ77. ASCII STL файл. Формат STL.

  6. MTF+RLE. Веб-страница. Пример страницы.

  7. BWT+Huffman. Большой файл из SecLists (\(\ge\) 100 Мб).

  8. BWT+Vitter. Блоки /dev/random. Файл (\(\ge\) 100 Мб).

  9. MTF+LZ77. Самый большой файл из репозитория ядра Linux.

  10. BWT+MTF+RLE. Словарь Ожегова.

  11. MTF+Huffman. Любой файл \(\ge\) 100 Мб из COMB. Пароль +w/P3PRqQQoJ6g.

  12. MTF+Vitter. /var/log/Xorg.0.log.