Проект представляет собой реализацию файлового компрессора на C++, который использует различные алгоритмы сжатия и предобработки данных. Все алгоритмы реализованы с нуля без использования сторонних библиотек. Компрессор поддерживает работу с любыми типами файлов. ! Не предназначен для профессионального использования (см. "Примечание") !
Проект включает в себя реализацию следующих алгоритмов:
- RLE (Run-Length Encoding) — алгоритм сжатия данных, заменяющий повторяющиеся символы на их количество.
- MTF (Move-To-Front) — алгоритм преобразования данных, который перемещает часто встречающиеся символы в начало списка.
- BWT (Burrows-Wheeler Transform) — алгоритм преобразования данных, который переставляет символы для повышения эффективности сжатия.
- HA (Huffman Coding) — алгоритм сжатия данных, использующий переменную длину кода для каждого символа.
- AC (Arithmetic Coding) — алгоритм сжатия данных, который кодирует данные в одно дробное число.
- LZ77 (Lempel-Ziv 77) — алгоритм сжатия данных, использующий скользящее окно для поиска повторяющихся последовательностей.
Компрессор использует следующие комбинации алгоритмов для сжатия данных:
- HA
- AC
- BTW + RLE
- BTW + MTF + AC
- BTW + MTF + HA
- BTW + MTF + RLE + HA
- BTW + MTF + RLE + AC
- LZ77 + HA
- Для текстовых файлов (
.txt) компрессор использует алгоритм UTF-8 при считывании и записи данных (если сжатые данные записываются в виде текста). - Для всех остальных файлов данные считываются побайтово в бинарном режиме и рассматриваются как текст.
Проект является студенческой работой по реализации базовых алгоритмов сжатия. Не предназначен для профессионального использования, потому что не контролирует расход памяти и не является досаточно оптимизрованным. Проект следует использовать лишь для ознакомления и изучения.
Для сборки проекта необходимо использовать компилятор C++ (например, g++). Перейдите в папку проекта и выполните следующие команды в терминале:
g++ -o .\bin\file-compressor .\src\main.cpp
После сборки проекта вы можете запустить компрессор с помощью следующей команды:
./file-compressor [тип обработки] [опции] [входной файл] [выходной файл]
compress: сжатиеdecompress: восстановление
HA: Использовать алгоритм Huffman Coding.AC: Использовать алгоритм Arithmetic Coding.BWT+RLE: Использовать комбинацию BWT + RLE.BWT+MTF+AC: Использовать комбинацию BWT + MTF + AC.BWT+MTF+HA: Использовать комбинацию BWT + MTF + HA.BWT+MTF+RLE: Использовать комбинацию BWT + MTF + RLE + HA.BWT+MTF+RLE+AC: Использовать комбинацию BWT + MTF + RLE + AC.LZ77+HA: Использовать комбинацию LZ77 + HA.
Сжатие:
./bin/file-compressor compress AC input.txt compressed_output.bin
Восстановление:
./bin/file-compressor decompress AC compressed_output.bin decompressed_input.txt