Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СМП_ответы.doc
Скачиваний:
2
Добавлен:
02.08.2019
Размер:
8.89 Mб
Скачать
  1. Модифікування дерева у алгоритмі Хаффмана.

Конспект:

Символи які розміщені ближче до основи мають найменшу вагу Хемінга кодової комбінації.

Необхідно модифікувати дерево таким чином щоб символи які більш частіше зустрічаються в тексті розміщувались ближче до основи.

Для цього необхідно упорядкувати дерево.

Упорядкування здійснюється зліва на право. Для символів 1 рівня з низу в верх. Коли необхідно виконати заміщення між вузлами сусідніх рівнів.

Книга:

СвойствоХаффманаозначает, что при изучении дерева по всем уровням слева направо и снизу вверх (от листьев к корню) частоты будут упорядочены по возрастанию (неубыванию). Таким образом, нижний левый узел (А) имеет наименьшую частоту, а верхний правый (корень) имеет наибольшую частоту. Это свойство принято называть свойством соперничества.

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

Приведем последовательность операций при модификации дерева. Цикл начинается в текущем узле (соответствующем новому входному символу). Этот узел будет листом, который мы обозначим X, а его частота пусть будет F. На каждой следующей итерации цикла требуется сделать три действия:

  1. Переповнення лічильника у алгоритмі Хаффмана.

Счетчики частот символовсохраняются на дереве в виде чисел с фиксированнойразрядностью. Поля разрядовмогутпереполниться. Число без знака из 16 двоичных разрядов может накапливать счетчик до числа 216 — 1 = 65535. Простейшее решение этой проблемы заключается в наблюдении за ростом счетчика в корне дерева, и, когда он достигает максимального значения, следует сделать изменение масштаба всех счетчиков путем их целочисленного деления на 2. На практике это обычно делается делением счетчиков листьев с последующим вычислением счетчиков всех внутренних узлов дерева. Каждый внутренний узел равен сумме своих потомков. Однако при таком методе целочисленного деления понижается точность вычислений, что может привести к нарушению свойства соперничества узлов дерева.

Простейший пример приведен на рис. 1.15h. После уполовинива-ния счетчиков листьев, три внутренних узла пересчитаны, как показано на рис. 1.151. Полученное дерево, однако, не удовлетворяетсвойствуХаффмана, посколькусчетчики перестали бытьупорядоченными. Поэтому послекаждойсменымасштабатребуется перестройка дерева, которая, по счастью, будетделаться не слишком часто.

Конспект:

Якщо значення частот символів лічильника переповнюється виникає порушення в алгоритмі. Необхідна зміна масштабу всіх лічильників. Але коли змінюється масштаб порушується співвідношення між вузлами.

  1. Спрощений варіант алгоритму Хаффмана стиску даних.

Этотвариант адаптивного кодированияХаффманаоченьпрост, номенееэффективен. Егоидеязаключается в построениимножестваиз п кодов переменнойдлины на основеравныхвероятностей и случайномприсвоенииэтихкодов п символам. Послечегосменакодовделается «на лету» по мере считывания и сжатиясимволов. Метод не слишкомпроизводителен, посколькукоды не основаны на реальныхвероятностяхсимволоввходногофайла.Основная структура данных - этотаблицаразмера п х 3, в кото­рой три столбцахранят, соответственно, имена п символов, часто­тысимволов и ихкоды. Таблица все времяупорядочена по второ­мустолбцу. Когдасчетчики частот вовторомстолбцеизменяются, строки переставляются, ноперемещаютсятолькопервый и второйстолбцы.

Пример кодирование «a2a4a4»

Рис 1.17.

На рис.1.17 изображено начальное состояние. После считыва­ния символа а2 его счетчик увеличивается, и поскольку он теперь наибольший, строки 1 и 2 меняются местами (рис. 1.17Ь). Далее счи-тывается второй символ 04, его счетчик увеличивается, и строки 2 и 4 переставляются (рис. 1.17с). Наконец, после считывания третье­го символа а4, его счетчик становится наибольшим, что приводит к перестановке строк 1 и 2 (рис. 1.17d). В этом алгоритме только одно место может вызвать пробле­му - это переполнение счетчиков. Если переменные счетчиков име­ют разрядность к бит, их максимальное значение равно 2^ — 1. По­этому наступит переполнение после 2^-го увеличения. Это может случиться, если размер сжимаемого файла заранее не известен, что бывает часто. К счастью, нам не надо знать точные значения счет­чиков. Нам нужен лишь их порядок, поэтому эту проблему перепол­нения легко разрешить.