Реализация двух известных алгоритмов для сжатия файлов - LZW и алгоритма Хаффмана. Данные программы представляют из себя консольные интерфейсы с ограниченным количеством команд, достаточных для архивации/деархивации любых файлов с сохранением первоначального расширения. Также обе программы поддерживают запуск через консоль с соответствующими аргументами.
Пользователю доступно 4 команды:
- zip
path
- архивация файла по указанному пути. После генерации байт-кода будет открыт SaveFileDialog для сохранения сжатого файла в формате .hruh. - gen
path
- генерация таблицы кодирования. Также имеется возможность записи этой таблицы в файл. - unzip
path
- восстановление исходного файла из указанного. После генерации байт-кода будет открыт SaveFileDialog для сохранения полученного файла с исходным расширением. - regen
path
- восстановление таблицы Хаффмана из сжатого файла.
Словарь в алгоритме реализован с помощью структуры бора. Это позволило немного уменьшить затраты по памяти на хранение всех наборов байт, а также ускорить поиск набора в этом словаре.
Алгоритм поддерживает 2 возможных варианта записи номеров наборов байт - с помощью кодов фиксированной длины со сбросом на 17 бите и с помощью дельта-кода Элиаса. Выбранный вариант кодирования также хранится в качестве первого бита сжатого файла.
Пользователю доступно 2 команды:
- zip
0/1
path
- архивация файла по указанному пути. 0 - запись с помощью кодов фиксированной длины, 1 - использование дельта-кода Элиаса. После генерации байт-кода будет открыт SaveFileDialog для сохранения сжатого файла в формате .kalov. - unzip
path
- восстановление исходного файла из указанного. После генерации байт-кода будет открыт SaveFileDialog для сохранения полученного файла с исходным расширением.