Version 2 (modified by 8 years ago) (diff) | ,
---|
Напишите программу, выполняющую сжатие двухпроходным алгоритмом Хаффмана.
- Параметры командной строки.
- -c архивирование
- -u разархивирование
- -f, --file <путь> имя входного файла
- -o, --output <путь> имя результирующего файла
Значение параметра (если есть) указывается через пробел. Программа должна проверять корректность параметров и выводить сообщение об ошибке.
- Программа должна выводить на экран статистику сжатия/распаковки: размер исходных данных, размер полученных данных и размер, который был использован для хранения вспомогательных данных в выходном файле (например, таблицы). Не должно выводиться никакого дополнительного текста, только размеры.
Все размеры в байтах. Программы с наименьшим размером выходного файла оцениваются наибольшим числом баллов.
Например:
$ ./huffman -c -f myfile.txt -o result.bin 15678 6172 482
Размер исходного файла (исходные данные): 15678 байт, размер сжатых данных (без дополнительной информации): 6172 байта, размер дополнительных данных: 482 байта. Рамер всего сжатого файла: $6172 + 482 = 6654$ байта.
$ ./huffman -u -f result.bin -o myfile_new.txt 6172 15678 482
Размер распакованного файла (полученные данные): 15678 байт, размер сжатых данных (без дополнительной информации): 6172 байта, размер дополнительных данных: 482 байта. Рамер всего исходного сжатого файла: $6172 + 482 = 6654$ байта.
- Ограничения.
Наибольший размер входного файла~--- 5MB. Ограничение на время выполнения~--- 5 секунд.
- Требования по реализации
- Программа должна быть написана в ООП стиле
- Там, где это уместно, должна быть использована библиотека STL (например, std::vector, а не динамический массив)
- Должны использоваться исключения
- Должен быть реализован свой класс для автоматического тестирования
- Для нескольких публичных функций должны быть написаны автотесты
- Примечания.
- Рекомендуем удостовериться, что сжатый, а затем разжатый Вами файл эквивалентен исходному.
- Рекомендуем протестировать на больших файлах, файлах разного типа (текстовые, бинарные) и на пустом файле.
- Рекомендуем проверить свою программу на синтетических тестах, заведомо плохо кодируемых алгоритмом Хаффмана.
- Рекомендуем проверить свою программу на утечки памяти.
6.Формат сдачи. В директории ha02 в репозитории должны быть: директория src, директория test, Makefile
- Директория src: main.cpp, huffman.h, huffman.cpp
- Директория test: test.cpp, autotest.h, autotest.cpp, test_huffman.h, test_huffman.cpp
- Makefile:
- цель по умолчанию собирает main и объектные файлы в директорию bin (создается при сборке, если не существует)
- цель test собирает test и объектные файлы в директорию bin
- цель clean очищает директорию bin
- Срок сдачи
6 мая, 23:59