Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
all of DiskretMat.rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
60.29 Mб
Скачать

4.1.2. Краткое описание метода Хаффмена.

Входной поток: алфавит {a1, a2, …, aN}.

Выходной поток: алфавит {0, 1}.

Пусть у нас буквы a, b, c, d расположены в терминальных вершинах дерева:

Рис.1.

Каждой букве мы можем приписать путь до нее от корня дерева, считая, например, передвижение по ветви влево — 0, вправо — 1:

a ~ 0, b ~ 10, c ~ 110, d ~ 111.

Разберем на примере процедуру построения дерева по входной последовательности, состоящей из a1, a2, a3, a4, a5.

Пусть a1, a2, a3, a4, a5 встретились 5, 3, 10, 1 и 4 раза соответственно. Строим гистограмму частот этих символов.

Рис.2.

1. Берем две самые редкие буквы: a2 и a4, создаем временный узел a6, для которого a2 и a4 — нижние листья, (частота a6) = (частота a2) + (частота a4) = 4. a2 и a4 в дальнейшем не рассматриваем.

2. Из a1, a3, a5, a6 выбираем две самые редкие буквы: a5 и a6, создаем временный узел a7 с частотой 4 + 4 = 8, для которого a5 и a6 — нижние листья. a5 и a6 в дальнейшем не рассматриваем.

3. Из a1, a3, a7 выбираем две самые редкие буквы: a1 и a7, создаем a8 с частотой 13, для которого a1 и a7 — нижние листья. a1 и a7 в дальнейшем не рассматриваем.

4. Создаем a9, с нижними листьями a3, a8.

Получаем дерево:

Рис.3.

Свойства метода Хаффмана:

  1. Код Хаффмана оптимален (в смысле результата наименьшей длины в пределе) в классе алгоритмов, использующих префиксный код.

  2. Таблицу частот символов можно или строить для каждой входной последовательности свою, или использовать фиксированную таблицу кодов, или строить ее динамически по имеющимся на каждый момент данным.

Кодирование Хаффмана используется, например, в JPG.

При описании реализации этого метода многие авторы пишут о том, что список символов должен быть упорядочен по вероятностям символов, и это упорядочение нужно обновлять после каждой склейки. Так поступать, конеч­но, неразумно. После начального упорядочения (символы располагаются по возрастанию их вероятностей) дополнительных упорядочений производить не требуется. Достаточно организовать еще один список для новых символов. Добавление идет в конец этого списка, и возрастание вероятностей в нем обеспечивается само по себе. А при выборе двух символов с наименьшими вероятностями мы используем виртуальный список — результат слияния ста­рого и нового списков. Поскольку размер нового списка известен, (на один элемент короче исходного) такой список реализуется обычным массивом.

Метод Хаффмена легко допускает всевозможные "усовершенство­вания". Например, при заметном преобладании какого-либо из симво­лов, вызывающем его многократные повторы, можно сначала заменить последовательности повторов более экономной записью, а затем уже использовать метод Хаффмена.

Из рассмотрения задач поиска и кодирования следуют некоторые практические рекомендации качественного характера: полезно назы­вать длинными именами те объекты в программах, которые редко используются, и короткими именами — используемые часто. Нужно располагать ближе и удобнее то, что используется чаще, и т. п.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]