Вы находитесь на странице: 1из 4

1.

Поясните сущность метода сжатия кодом Хаффмена

Кодирование Хаффмана – это алгоритм сжатия данных, который


формулирует основную идею сжатия файлов. Каждый символ хранится в
виде последовательности из 0 и 1 и занимает 8 бит. Это называется
кодированием фиксированной длины, поскольку каждый символ использует
одинаковое фиксированное количество битов для хранения.
Метод основывается на создании бинарных деревьев. В нем узел может
быть либо конечным, либо внутренним. Изначально все узлы считаются
листьями (конечными), которые представляют сам символ и его вес (то есть
частоту появления). Внутренние узлы содержат вес символа и ссылаются на
два узла-наследника. По общему соглашению, бит «0» представляет
следование по левой ветви, а «1» — по правой. В полном дереве N листьев
и N-1 внутренних узлов. Рекомендуется, чтобы при построении дерева
Хаффмана отбрасывались неиспользуемые символы для получения кодов
оптимальной длины.
Идея, положенная в основу кодировании Хаффмана, основана на частоте
появления символа в последовательности. Символ, который встречается в
последовательности чаще всего, получает новый очень маленький код, а
символ, который встречается реже всего, получает, наоборот, очень длинный
код. Это нужно, так как мы хотим, чтобы, когда мы обработали весь ввод,
самые частотные символы заняли меньше всего места (и меньше, чем они
занимали в оригинале), а самые редкие — побольше (но так как они редкие,
это не имеет значения). Для нашей программы я решил, что символ будет
иметь длину 8 бит, то есть, будет соответствовать печатному знаку.

Итак, алгоритм Хаффмана работает следующим образом:

1. На вход приходят упорядоченные по невозрастанию частот данные.

2. Выбираются две наименьших по частоте буквы алфавита, и создается


родитель (сумма двух частот этих «листков»).

3. Потомки удаляются и вместо них записывается родитель, «ветви»


родителя нумеруются: левой ветви ставится в соответствие «1», правой «0».

4. Шаг два повторяется до тех пор, пока не будет найден главный


родитель — «корень».

2. Поясните сущность метода сжатия кодом Фано


Алгоритм основан на частоте повторения. Так, часто встречающийся
символ кодируется кодом меньшей длины, а редко встречающийся — кодом
большей длины. В свою очередь, коды, полученные при кодировании,
префиксные. Это и позволяет однозначно декодировать любую
последовательность кодовых слов.

Алгоритм Фано работает следующим образом:

1. На вход приходят упорядоченные по невозрастанию частот данные.

2. Находится середина, которая делит алфавит примерно на две части.


Эти части (суммы частот алфавита) примерно равны. Для левой части
присваивается «1», для правой «0», таким образом мы получим листья дерева

3. Шаг 2 повторяется до тех пор, пока мы не получим единственный


элемент последовательности, т.е. листок.

3. Как связаны коды арифметический код и код Гилберта-Мура?

4. Как оценивается эффективность кодов сжатия?


Для оценки эффективности неравномерных кодов используется коэффициент
N
Н
относительной эффективности К∞= ,
nср где
Н=∑ p i log2 pi это энтропия
i=1

источника с алфавитом, имеющим объем N знаков, равная среднему


количеству информации, приходящемуся на один знак на выходе источника
и измеряющаяся в битах. Здесь pi- вероятность появления i-го символа из N
N
различных символов алфавита источника, а n ср=∑ n i pi- средняя длина
i=1

кодовой комбинации. Отношение среднего числа двоичных символов,


приходящихся на один знак алфавита, при кодировании заданного источника
неравномерным кодом к длине кодовой комбинации в случае кодирования
nср
источника равномерным кодом, называется коэффициентом сжатия К сж = .
n

Эффективность сжатия характеризуется:


– степенью сжатия (compress rating) или отношение (ratio) объемов исходного
и результирующего потоков;
– скоростью сжатия – время, затрачиваемое на сжатие некоторого объема
информации входного потока, до получения из него эквивалентного
выходного потока;
– качеством сжатия – величина, показывающая, на сколько сильно упакован
выходной поток, при помощи применения к нему повторного сжатия по
этому же или иному алгоритму.

5. В чем преимущество и недостатки арифметического кода?


Арифметическое кодирование является весьма эффективной
альтернативой кодам Хаффмана. С их помощью можно плотнее
приблизиться к теоретически наилучшим границам сжатия статистических
данных.
Арифметический кодер преобразует исходную последовательность
символов в одно-единственное действительное число, которое приближается
к теоретическому оптимальному нецелому числу бит, необходимому для
представления каждого символа последовательности.
Принципиальное преимущество метода арифметического кодирования
заключается в том, что передаваемое кодовое число (в нашем случае - это
число 0,394, которое можно представить в двоичном виде девятью битами),
не ограничивается заданием целого числа битов для каждого отдельного
символа кодируемой последовательности.
Недостатком является то, что символам приписываются
фиксированные кодовые слова, имеющие целую длину бит.

6. В чем преимущество и недостатки кода Хаффмена?


Самой большой сложностью с кодами Хаффмена является
необходимость иметь таблицы вероятностей для каждого типа сжимаемых
данных. Это не представляет проблемы, если известно, что сжимается
английский или русский текст; мы просто предоставляем кодеру и декодеру
подходящее для английского или русского текста кодовое дерево. В общем
же случае, когда вероятность символов для входных данных неизвестна,
статические коды Хаффмена работают неэффективно.
Коды Хаффмана обеспечивают два преимущества:
- Они эффективны по пространству с учетом некоторого корпуса
-Они являются префиксными кодами

7. Постройте алгоритм и напишите программу сжатия данных


большого объема.
8. Постройте алгоритм и напишите программу сжатия данных
кодом Фано