160 likes | 303 Views
Quffman Кроссплатформенная реализация алгоритма сжатия Хаффмана. Авторы : Дедков Антон 11 “ А ” , Шевелев Александр 11 “ А ” Научный руководитель : Дединский Илья Рудольфович. Цель работы.
E N D
QuffmanКроссплатформенная реализация алгоритма сжатия Хаффмана Авторы: Дедков Антон 11 “А”, Шевелев Александр 11 “А” Научный руководитель: Дединский Илья Рудольфович
Цель работы Создание кроссплатформенной библиотеки для сжатия данных методом Хаффмана, а также CLI и GUI фронтендов для взаимодействия конечного пользователя с ней. Дедков Антон 11 "А". Шевелев Александр 11 "А".
Задачи • Реализация алгоритма сжатия методом Хаффмана • Анализ факторов, влияющих на скорость и качество сжатия • Создание формата хранения сжатых данных • Разработка архитектуры библиотеки сжатия • Реализация CLI (интерфейса командной строки) • Реализация GUI на основе фреймворкаQt Дедков Антон 11 "А". Шевелев Александр 11 "А".
Сжатие данных С искажениями Архив Типы сжатия: • Сжатие с потерями • Сжатие без потерь Виды кодов: • Равномерные • Неравномерные Архив Без искажений A B A C Выигрыш A B A C Дедков Антон 11 "А". Шевелев Александр 11 "А".
Алгоритм Хаффмана Алгоритм Хаффмана - алгоритм построения кодов символов по частоте их встречаемости в файле Этапы: • Создание таблицы частот • Построение дерева • Кодирование Дедков Антон 11 "А". Шевелев Александр 11 "А".
Таблица частот Содержимое входного файла: ABACABADABACABA Послепосимвольного считывания файла получим результат:
Построение дерева 15 8+7 D1 C2 B4 A8 3 2+1 3 2+1 3 2+1 A8 0 1 C2 D1 C2 D1 C2 D1 C2 D1 7 4+3 7 4+3 1 0 0 1 B4 B4 0 1 1 0 1 0
Кодирование 15 8+7 3 2+1 Исходный текст: ABACABADABACABA 1 0 A8 • Кодирование одного из символов ( С ): • Находим лист с символом С • Проходим путь от листа до корня, накапливая биты • Переворачиваем полученную последовательность • Получаем код символа • С ( 110 ) C2 D1 0 1 7 4+3 0 1 B4 (A) ( B )(A) ( C ) (A)( B )(A) ( D ) (A)( B )(A) ( C ) (A)( B )(A) В результате:0 100110010011101001100100
Качество сжатия • Качество и мощность алфавита: Дедков Антон 11 "А". Шевелев Александр 11 "А".
Архитектура библиотеки • Взаимодействие программы происходит только с ядром • Ядро предоставляет инструменты для работы с файловой системой архива • Модуль, отвечающий за кодирование, абстрагирован от каких либо внешних факторов, он взаимодействует лишь с пакетами данных (CompressorData), которые формирует для него ядро lib_quffman Compressor CompressorData Core Application FileSystem Дедков Антон 11 "А". Шевелев Александр 11 "А".
archive.quf DataFormat Root directory (“/”) SystemInfo • Архив содержит всю информацию о данных • Атрибуты: quf, root, subdir, file, block Subdirectory (“/subdir1”) File (“/file1”) File (“/file2”) Subdirectory (“/subdir1/subdir2”) File (“/subdir1/file3”) File4 Block 2 File4 Block 2 File (“/subdir1/subdir2/file4”) DataBlocks quf(root(subdir(“subdir1”,subdir(“subdir2”, file(“file4”))… Дедков Антон 11 "А". Шевелев Александр 11 "А".
Проблемы • Появление в сжатых файлах системной информации • Соотношение скорость/качество сжатия • Проблема переполнения • Проблема “обратного слеша Дедков Антон 11 "А". Шевелев Александр 11 "А".
Итоги • Реализован алгоритм сжатия методом Хаффмана • Создан формат для хранения сжатых данных • Разработана архитектуры библиотеки сжатия • Реализован CLI • Реализован прототип GUI на основе фреймворка Qt Дедков Антон 11 "А". Шевелев Александр 11 "А".
Дальнейшее развитие • Перенос вычислений на многопроцессорные системы с использованием OpenCL • Реализация клиент-серверной архитектуры • Доработка GUI Дедков Антон 11 "А". Шевелев Александр 11 "А".
Спасибо за внимание! Самая свежая версия всегда ждет вас на quffman.googlecode.com Дедков Антон 11 "А". Шевелев Александр 11 "А".