Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
технологии.docx
Скачиваний:
137
Добавлен:
15.02.2016
Размер:
3.47 Mб
Скачать

Избыточность кодирования. Нижняя граница средней длины кодирования

Рассмотренные ранее примеры показывают, что использование кодов переменной длины позволяет эффективнее кодировать сообщения по сравнению с равномерным кодированием. Для получения оценки минимально достижимой средней длины кодового слова рассмотрим избыточность кодирования , представляющую собой разностьмежду средней длиной кодового слова при кодировании источника S кодом c иэнтропией. Две следующие теоремы показывают, какова нижняя граница средней длины кодирования и как близко можно приблизиться к этой границе за счет рационального выбора кодовых слов.

Для доказательства первой теоремы напомним одно свойство логарифма, которое заключается в том, что график функции лежит ниже касательной к ней в точке, и следовательно, выполняется неравенство. Это свойство иллюстрируетрис.6.6.

Теорема. Для произвольного источника ипрефиксного кода избыточность кодирования неотрицательна, т. е..

Рис. 6.6. График функции log2(x) и касательной к ней в точке x=1

Доказательство.

С учетом отмеченного выше неравенства для функции каждое слагаемое можно оценить сверху следующим образом:

После суммирования получим

причем последнее неравенство следует из неравенства Крафта (6.3) для префиксного кода и равенства . Таким образом,, что доказывает утверждение теоремы.

Из доказанной теоремы следует, что энтропия источника является нижней границей средней длины кодирования. Для источников, у которых вероятности являются целыми отрицательными степенями 2, эта граница достижима. Легко проверить, что для источника с распределением вероятностей средняя длина кодирования равна 1,75 и совпадает сэнтропией источника.

Для доказательства второй теоремы потребуется функция , которая называется "потолок" и определяется выражением. Необходимые для доказательства свойства этой функции легко следуют из ее графика, показанного нарис.6.7, и заключаются в выполнении неравенств .

Рис. 6.7. График функции [x]

Теорема. Для каждого источника найдетсяпрефиксный код , избыточность которого не превышает единицы, т. е..

Пусть , гдефункция "потолок". Тогда

Это означает, что числа удовлетворяютнеравенству Крафта. Тогда из теоремы Крафта следует, что найдется префиксное кодирование , такое что. Оценим избыточность этого кодирования

Теорема доказана.

Данная теорема гарантирует, что для любого источника найдется префиксный код со средней длиной кодирования, превышающейэнтропию не более чем на 1.

Оптимальное кодирование, свойства оптимальных кодов, построение оптимальных кодов методом Хафмена

Для практических целей представляет интерес нахождение для каждого источника префиксного кода с минимальной средней длиной кодирования.

Определение. Префиксное кодирование называется оптимальным для источника, если для каждого префиксного кодирования c источникасправедливо неравенство.

Для каждого источника существует оптимальный код, поскольку множество префиксных кодов источника с избыточностью, меньшей либо равной 1, не пусто и конечно. Один источник может иметь несколько оптимальных кодов с разными наборами длин кодовых слов.

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

Свойство 1. Для оптимального кода из следует, что.

Для доказательства предположим противное, т. е. что для оптимального кода существуют и, такие чтои. Построим новый код, поменяв местами кодовые слова рассматриваемого оптимального кода для-ой и-ой букв алфавита. Разность между средней длинойкодирования оптимальным кодом и средний длинойпостроенного кода имеет вид

что противоречит оптимальности рассматриваемого кода.

Свойство 2. Существует оптимальный код источника , для которого

причем два последних слова имеют максимальную длину и отличаются только в последнем знаке.

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

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

Опираясь на рассмотренные свойства, можно построить оптимальный для заданного источника код с использованием двух процедур: сжатия источника и расщепления кода. Смысл первой процедуры заключается в том, что исходный источник последовательно заменяется на более простой (содержащий на 1 меньше знаков) источник. Применение процедуры сжатия заканчивается, когда будет получен простейший источник с двумя знаками, оптимальное кодирование которого очевидно. Процедура расщепления кода предназначена для построения из оптимального кода более простого источника оптимального кода того источника, из которого процедурой сжатия был получен простой источник.

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

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

Применяя сжатие к источнику , получим новый источник, применяя затем процедуру сжатия кполучим. Действуя подобным образомраза, построим последовательность источников,.

Алфавит источника состоит только из двух знаков, поэтому найти оптимальный код для этого источника не составляет труда. Одно из слов кодируется знаком 0, а другое - знаком 1. Это особенно важно потому, что, используя оптимальный код для источникаи последовательность кодов, можно найти оптимальный код для исходного источника.

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

Пусть имеем источник

И оптимальный код 

Через обозначен тот знак алфавита источника, который заменил два знака с минимальными вероятностями источникапри его сжатии.

Процедура расщепления заключается в использовании оптимального кода источникадля построения оптимального кода для источника. Она заключается в следующем: знакам алфавита источника, перешедшим вбез изменения, назначаются кодовые слова совпадающих с ними знаков источника; двум наименее вероятным знакам алфавита источника, замененным в процессе сжатия на знак, сопоставляют кодовые словаи.

Слово в оптимальном коде источника, содержащемзнаков, "расщепляется", путем добавления (конкатенации) знаков 0 и 1, на 2 слова в кодовом множестве для источника, содержащемзнаков.

Средняя длина кода источникаи средняя длинакода, полученного из него расщеплением, связаны соотношением. Действительно,

Докажем, что получающийся в результате расщепления код является оптимальным для источника .

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

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

Описанный метод оптимального кодирования был предложен в 1952 г. Д. Хафменом и называется его именем. В общем случае, когда для кодирования используется алфавит из более чем двух букв, метод Хафмена рассмотрен в [32].

Рассмотрим процесс построения оптимального кода на примере источника из пяти сообщений с вероятностями . Построение кода показано на следующем рисунке.

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

В данном случае средняя длина кодирования для оптимального кода, построенного методом Хафмена, составляет 2,2. Это меньше, чем средняя длина кода, построенного ранее методом Фано для того же источника.