| 1 | Напишите программу, выполняющую сжатие двухпроходным алгоритмом Хаффмана. |
| 2 | |
| 3 | 1. Параметры командной строки. |
| 4 | * -c архивирование |
| 5 | * -u разархивирование |
| 6 | * -f, --file <путь> имя входного файла |
| 7 | * -o, --output <путь> имя результирующего файла |
| 8 | |
| 9 | Значение параметра (если есть) указывается через пробел. |
| 10 | Программа должна проверять корректность параметров и выводить сообщение об ошибке. |
| 11 | |
| 12 | 2. Программа должна выводить на экран статистику сжатия/распаковки: размер исходных данных, размер полученных данных и размер, который был использован для хранения вспомогательных данных в выходном файле (например, таблицы). Не должно выводиться никакого дополнительного текста, только размеры. |
| 13 | Все размеры в байтах. |
| 14 | |
| 15 | Например: |
| 16 | {{{ |
| 17 | $ ./huffman -c -f myfile.txt -o result.bin |
| 18 | 15678 |
| 19 | 6172 |
| 20 | 482 |
| 21 | }}} |
| 22 | |
| 23 | Размер исходного файла (исходные данные): 15678 байт, размер сжатых данных |
| 24 | (без дополнительной информации): 6172 байта, размер дополнительных данных: |
| 25 | 482 байта. Рамер всего сжатого файла: $6172 + 482 = 6654$ байта. |
| 26 | |
| 27 | {{{ |
| 28 | $ ./huffman -u -f result.bin -o myfile_new.txt |
| 29 | 6172 |
| 30 | 15678 |
| 31 | 482 |
| 32 | }}} |
| 33 | |
| 34 | Размер распакованного файла (полученные данные): 15678 байт, размер сжатых данных |
| 35 | (без дополнительной информации): 6172 байта, размер дополнительных данных: |
| 36 | 482 байта. Рамер всего исходного сжатого файла: $6172 + 482 = 6654$ байта. |
| 37 | |
| 38 | 3. Ограничения. |
| 39 | Наибольший размер входного файла~--- 5MB. Ограничение на время выполнения~--- 5 секунд. |
| 40 | |
| 41 | 4. Требования по реализации |
| 42 | * Программа должна быть написана в ООП стиле |
| 43 | * Там, где это уместно, должна быть использована библиотека STL (например, std::vector, а не динамический массив) |
| 44 | * Должны использоваться исключения |
| 45 | * Должен быть реализован свой класс для автоматического тестирования |
| 46 | * Для нескольких публичных функций должны быть написаны автотесты |
| 47 | |
| 48 | 5. Примечания. |
| 49 | * Рекомендуем удостовериться, что сжатый, а затем разжатый Вами файл эквивалентен исходному. |
| 50 | * Рекомендуем протестировать на больших файлах, файлах разного типа (текстовые, бинарные) и на пустом файле. |
| 51 | * Рекомендуем проверить свою программу на синтетических тестах, заведомо плохо кодируемых алгоритмом Хаффмана. |
| 52 | * Рекомендуем проверить свою программу на утечки памяти. |
| 53 | |
| 54 | 6.Формат сдачи. |
| 55 | В директории ha02 в репозитории должны быть: директория src, директория test, Makefile |
| 56 | |
| 57 | * Директория src: main.cpp, huffman.h, huffman.cpp |
| 58 | * Директория test: test.cpp, autotest.h, autotest.cpp, test_huffman.h, test_huffman.cpp |
| 59 | * Makefile: |
| 60 | |
| 61 | 1. цель по умолчанию собирает main и объектные файлы в директорию bin (создается при сборке, если не существует) |
| 62 | 2. цель test собирает test и объектные файлы в директорию bin |
| 63 | 3. цель clean очищает директорию bin |
| 64 | |
| 65 | 7. Срок сдачи |
| 66 | |
| 67 | 6 мая, 23:59 |