Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

сиаод / 35-66 / 74.Сжатие информации. Метод Хаффмана

..pdf
Скачиваний:
64
Добавлен:
11.05.2015
Размер:
213.8 Кб
Скачать

74.Сжатие информации. Метод Хаффмана.

Сжатие сокращает объем пространства, требуемого для хранения файлов в ЭВМ, и количество времени, необходимого для передачи ин¬формации по каналу установленной ширины пропускания. Рассматривается обратимое сжатие или сжатие без наличия помех, где первоначальный текст может быть в точности восстановлен из сжатого состояния. Необратимое или ущербное сжатие используется для цифровой записи аналоговых сигналов, таких как человеческая речь или рисунки. Обратимое сжатие особенно важно для текстов, записанных на естественных и на искусственных языках, поскольку в этом случае ошибки обычно недопустимы. Существует много веских причин осуществлять сжатие данных, так как более быстрая передача данных и сокращение пространства для их хранения позволяют сберечь значительные средства и зачастую улуч¬шить показатели ЭВМ. Существуют два основных способа проведения сжатия: статистический и словарный. Лучшие статистические методы применяют кодиро¬вание Хаффмана, лучшие словарные – метод Зива-Лемпела. В статистическом сжатии каждому символу присваивается код, основанный на вероятности его появления в тексте. Высоковероятные символы получают короткие коды, и наоборот. В словарном методе группы последовательных символов или «фраз» заменяются кодом. Замененная фраза может быть найдена в некотором «словаре». Метод Хаффмана. В этом методе при сжатии данных каждому символу присваивается оптимальный префиксный код, основанный на вероятности его появления в тексте. Префиксные коды – это коды, в которых никакое кодовое слово не является префиксом любого другого кодового слова. Эти коды имеют переменную длину. Алгоритм Хаффмана можно разделить на два этапа:

1)определение вероятности появления символов в файле;

2)нахождение оптимального префиксного кода. На первом этапе необходимо прочитать файл полностью и подсчитать вероятности появления символов в файле (иногда подсчитывают, сколько раз встречается каждый символ). Если при этом учитываются все 256 сим¬волов, то не будет разницы в сжатии текстового или файла иного формата. Далее находятся два символа a и b с наименьшими вероятностями появления и заменяются одним фиктивным символом x, который имеет вероятность появления, равную сумме вероятностей появле¬ния символов a и b. Затем, используя эту процедуру рекурсивно, находится оптимальный префиксный код для меньшего множества символов (где символы a и b заменены одним символом x). Код для исходного множества символов получается из кодов замещающих символов путем добавления 0 или 1 перед кодом замещающего сим¬вола, и эти два новых кода принимаются как коды заменяемых сим¬волов. Например, код символа a будет соответствовать коду x с до¬бавленным нулем перед этим кодом, а для символа b перед кодом символа x будет добавлена единица.

Huffman(C)

1.n ←|c|

2.Q ←C

3.For i=q to n-1 do

4.Выделить память для нового узла z

5.x ←min(Q); z^.left ←x

6.y ←min(Q); z^.Right ←y

7.z^.f ←x^.f+y^.f

8.Insertt(Q,z)

9.End for

10.Return min(Q)

Соседние файлы в папке 35-66