wiki:ha02

Напишите программу, выполняющую сжатие двухпроходным алгоритмом Хаффмана.

  1. Параметры командной строки.
    • -c архивирование
    • -u разархивирование
    • -f, --file <путь> имя входного файла
    • -o, --output <путь> имя результирующего файла

Значение параметра (если есть) указывается через пробел. Программа должна проверять корректность параметров и выводить сообщение об ошибке.

  1. Вывод на экран.

Программа должна выводить на экран статистику сжатия/распаковки: размер исходных данных, размер полученных данных и размер, который был использован для хранения вспомогательных данных в выходном файле (например, таблицы). Не должно выводиться никакого дополнительного текста, только размеры. Все размеры в байтах. Программы с наименьшим размером выходного файла оцениваются наибольшим числом баллов.

Например:

$ ./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 байта.

  1. Ограничения.

Наибольший размер входного файла --- 5MB. Ограничение на время выполнения --- 5 секунд.

  1. Требования по реализации.
    • Программа должна быть написана в ООП стиле
    • Там, где это уместно, должна быть использована библиотека STL (например, std::vector, а не динамический массив)
    • Должны использоваться исключения
    • Должен быть реализован свой класс для автоматического тестирования
    • Для методов должны быть написаны автотесты
  1. Примечания.
    • Рекомендуем удостовериться, что сжатый, а затем разжатый Вами файл эквивалентен исходному
    • Рекомендуем протестировать на больших файлах, файлах разного типа (текстовые, бинарные) и на пустом файле
    • Рекомендуем проверить свою программу на синтетических тестах, заведомо плохо кодируемых алгоритмом Хаффмана
    • Рекомендуем проверить свою программу на утечки памяти
  1. Формат сдачи.

В директории ha02 в репозитории должны быть: директория src, директория test, Makefile.

  • Директория src: main.cpp, huffman.h, huffman.cpp
  • Директория test: test.cpp, autotest.h, autotest.cpp, huffman_test.h, huffman_test.cpp
  • Makefile:
    • цель по умолчанию собирает исполняемый файл main и объектные файлы в директорию bin (создается при сборке, если не существует)
    • цель test собирает исполняемый файл test и объектные файлы в директорию bin
    • цель clean очищает директорию bin
  1. Срок сдачи.

6 мая, 23:59

Last modified 8 years ago Last modified on 04/21/16 09:36:14