Национальный исследовательский университет "Высшая Школа Экономики"
Опубликован: 19.11.2012 | Доступ: свободный | Студентов: 12660 / 7831 | Длительность: 29:54:00
Специальности: Менеджер, Преподаватель
Лекция 6:

Информационные технологии

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >

Необходимые и достаточные условия существования префиксного кода с заданными длинами кодовых слов. Неравенство Крафта

Для применения кода на практике желательно, чтобы кодовые слова были как можно короче. Однако чем слова короче, тем их запас меньше. В этом легко убедиться, посмотрев на изображение словарного универсума на рис.6.3. Если попытаться построить префиксный код с очень короткими длинами кодовых слов, то можно потерпеть неудачу - кода с такими длинами слов может не быть. Например, нетрудно убедиться, что не существует префиксного кода с длинами слов 1, 1, 2. При необходимости построить префиксный код с большим числом кодовых слов заданной длины проверка существования такого кода может быть достаточно сложной. К счастью, найдены необходимые и достаточные условия на длины кодовых слов для существования префиксного и любого однозначно декодируемого кода. Эти условия известны как теорема Крафта - Макмиллана. Необходимые и достаточные условия сформулируем в виде двух теорем.

Теорема (необходимые условия). Пусть C=\{c_1, c_2, \dots, c_n\} - префиксный двоичный код с длинами кодовых слов l_1, l_2, \dots, l_n. Тогда выполняется неравенство Крафта

\frac{1}{2^{l_1}}+ \frac{1}{2^{l_2}}+ \dots + \frac{1}{2^{l_N}} \le 1 ( 6.3)

Доказательство. Рассмотрим, сколько слов длины k может быть в префиксном коде. Максимальное число таких слов равно 2^k. В этом случае все 2^k кодовых слова имеют длину k.

Для каждого кодового слова длины k-i имеется 2^i слов длины k, для которых данное слово является префиксом и по этой причине не является кодовым. Это следует из структуры словарного дерева (см. рис. 6.3). Множества T_{ci} и T_{cj} слов длины k, для которых кодовые слова c_i и c_j являются префиксами, не пересекаются, так как в противном случае более короткое из этих слов было бы префиксом более длинного. Значит, если в префиксном коде имеется n_{k-1} слов длины k-1, n_{k-2} слов длины k-2,\dots , n_1 слов длины 1, то число n_k слов длины k удовлетворяет неравенству

n_k \le 2^k-2^{k-1}n_1-2^{k-2}n_2- \dots - 2n_{k-1} ( 6.4)

Это неравенство верно для любого k, в том числе и для k, равного максимальной длине кодовых слов. После деления на 2^k обеих частей неравенства (6.4) его можно преобразовать к виду

\frac{n_k}{2^k}+\frac{n_{k-1}}{2^{k-1}}+\dots +\frac{n_2}{2^2}+\frac{n_1}{2} \le 1 ( 6.5)

Слагаемое вида \frac{n_m}{2^m}, представляющее в неравенстве (6.5) п_т кодовых слов длины т, можно записать в виде суммы

\frac{n_m}{2^m}=\overbrace{\frac{1}{2^m}+\frac{1}{2^m}+\dots+\frac{1}{2^m}}^{n_m}

С учетом такого представления неравенство (6.5) можно переписать следующим образом:

\frac{1}{2^{l_1}}+\frac{1}{2^{l_2}}+\dots+\frac{1}{2^{l_N}} \le 1

где N - общее число слов префиксного кода. Теорема доказана.

Выполнение неравенства Крафта доказано для префиксного кода. Однако в 1956 году Макмиллан доказал более общую теорему, согласно которой неравенство Крафта выполняется и для любого однозначно декодируемого кода. Доказательство теоремы изложено в [29], [31].

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

Теорема (достаточные условия). Если положительные целые числа l_1, l_2, \dots, l_n удовлетворяют неравенству Крафта

\frac{1}{2^{l_1}}+\frac{1}{2^{l_2}}+\dots+\frac{1}{2^{l_N}} \le 1

то существует префиксный код C=\{c_1, c_2, \dots, c_N\} с длинами кодовых слов |c_1|=l_1, |c_2|= l_2, \dots,|c_N|= l_N.

Доказательство. Если среди чисел l_1, l_2, \dots, l_N имеется ровно n_i чисел, равных i, то неравенство Крафта можно записать в виде

\frac{n_M}{2^V}+\frac{n_{k-1}}{2^{k-1}}+\dots+\frac{n_2}{2^2}+\frac{n_1}{2} \le 1

где M - максимальное из данных чисел. Из справедливости этого неравенства следует, что верны неравенства (6.5) для всех k \le M, а следовательно, и неравенство (6.4).

Для построения нужного префиксного кода должна быть возможность подходящим образом выбрать n_1 слов длины 1, n_2 слов длины 2, вообще n_k слов длины k(1 \le k \le M) или, иными словами, n_1 вершин кодового дерева на первом, n_2 - на втором, \dots , n_k - на k-м ярусе.

Из неравенства (6.4) при k=1 получаем n_1\le 2, т. е. требуемое число не превосходит общего числа вершин первого яруса. Значит, на этом ярусе можно выбрать какие-то n_1 вершин в качестве концевых (n_1 равно 0, 1 или 2). Если это сделано, то из общего числа вершин второго яруса (их 2^2=4) для построения кода можно использовать лишь 4-2n_1. Однако и этого числа вершин хватит, так как из неравенства (6.4) при k=2 вытекает

п_2 <4-2n_1

Аналогично, при k=3 имеем неравенство:

n_3 \le 2^3-4n_1-2n_2

Правая часть его вновь совпадает с допустимым для построения префиксного кода числом вершин третьего яруса, если на первых двух ярусах уже выбраны n_1 и n_2 кодовых вершин. Значит, снова можно выбрать n_3 кодовых вершин на третьем ярусе. Продолжая этот процесс вплоть до k=M, мы и получим требуемый код. Теорема доказана.

Докажем, что если для длин l_1, l_2, \dots, l_n кодовых слов выполняется равен - равенство \frac{1}{2^{l_1}}+\frac{1}{2^{l_2}}+\dots+\frac{1}{2^{l_n}}=1,то код является полным. Предположим противное, то есть, что код не полный. Тогда к нему можно добавить, по крайней мере, одно кодовое слово (длины l_{n+1}) и получить новый префиксный код, для которого, с одной стороны, \frac{1}{2^{l_1}}+\frac{1}{2^{l_2}}+\dots+\frac{1}{2^{l_n}}+\frac{1}{2^{l_{n+1}}}>1, а с другой стороны, в силу теоремы Крафта, \frac{1}{2^{l_1}}+\frac{1}{2^{l_2}}+\dots+\frac{1}{2^{l_n}}+\frac{1}{2^{l_{n+1}}} \le 1 Полученное противоречие доказывает утверждение.

Теоремы Крафта доказаны для случая, когда рассматриваются коды в алфавите \{0,1\}. Если кодовый алфавит содержит d символов, то аналогичным образом можно доказать, что необходимым и достаточным условием для существования префиксного кода с длинами слов l_1, l_2, \dots, l_N является выполнение неравенства

d^{-l_1}+d^{-l_2}+\dots+d^{-1_N} \le 1

Оказывается, этому неравенству обязаны удовлетворять и длины кодовых слов произвольного однозначно декодируемого кода. Поэтому, если существует однозначно декодируемый код с длинами слов l_1, l_2, \dots, l_N, то существует и префиксный код с теми же длинами слов.

Методы построения кодов. Код Фано

Один из методов алфавитного кодирования был предложен Фано. Схема кодирования по методу Фано заключается в следующем. Предположим, что кодируемые сообщения источника (знаки исходного алфавита) располагаются в последовательности A_1, A_2, \dots, A_N так, что соответствующие им вероятности не возрастают, т. е. P(A_1) \ge P(A_2) \ge \dots \ge P(A_N) . Рассмотрим разбиения последовательности A 1, A2, …, AN на две подпоследовательности A_1, A_2 \dots , A_m и A_{m+1}, A_{m+2}, \dots, A_N Каждое такое разбиение определяется числом m, 1 \le m \le N-1, которое определяет, сколько элементов исходной последовательности входит в первую и вторую части разбиения. Среди N-1 разбиения выберем такое, чтобы модуль разности |\sum_{i=1}^{m}P(A_i)-\sum_{m+1}^{N}P(A_i)| был минимальным. Всем сообщениям из первой части разбиения в качестве первого знака кодового слова приписываем 0, а сообщениям из второй части 1. По тому же принципу каждая из полученных подпоследовательностей снова разбивается на две части, и это раз-биение определяет значение второго символа кодового слова. Процедура продолжается до тех пор, пока все множество не будет разбито на отдельные сообщения. В результате каждому из сообщений будет сопоставлено кодовое слово из нулей и единиц.

Описанную процедуру построения кода Фано на примере из пяти сообщений иллюстрирует следующая таблица.

Таблица 6.1.
Сообщения Вероятности сообщений Знаки кодовых слов Кодовое слово
1-й знак 2-й знак 3-й знак
A_i 0.4 0 0 00
A_2 0.15 1 01
A_3 0.15 1 0 10
A_4 0.15 1 0 110
A_5 0.15 1 111

Понятно, что чем более вероятно сообщение, тем быстрее оно образует "самостоятельную" группу и тем более коротким словом оно будет закодировано. Это обстоятельство и обеспечивает высокую экономность кода Фано. Код, построенный для данного источника методом Фано, имеет среднюю длину кодового слова равную 2,3.

Код, построенный методом Фано, всегда является префиксным. Действительно, на первом шаге построения кода методом Фано множество сообщений источника разбивается на два подмножества. Все кодовые слова, соответствующие первому подмножеству, имеют однобуквенный префикс, состоящий из 0, а все слова, соответствующие второму подмножеству, имеют однобуквенный префикс, состоящий из 1 (или наоборот). Поэтому ни одно слово, соответствующее какому-нибудь из сообщений из первого подмножества, не может быть префиксом ни для какого слова, соответствующего сообщению из второго подмножества. Аналогичная процедура разбиения применяется к каждому подмножеству сообщений с одинаковыми префиксами при добавлении нового знака к формируемым кодовым словам. При этом число подмножеств, на которые разбивается исходное множество сообщений источника (блоков разбиения), увеличивается. Важным свойством разбиений является то, что для кодовых слов, соответствующих сообщениям из разных блоков разбиения, имеются различные префиксы. Построение кода завершается разбиением множества сообщений на блоки, содержащие по одному сообщению. Из-за отмеченного свойства разбиений ни одно кодовое слово не является префиксом другого кодового слова, то есть построенный методом Фано код является префиксным.

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

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

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

Для доказательства первой теоремы напомним одно свойство логарифма, которое заключается в том, что график функции log2(x) лежит ниже касательной к ней в точке x=1, и следовательно, выполняется неравенство log_2(x) \le \frac{x-1}{ln2}. Это свойство иллюстрирует рис.6.6.

Теорема. Для произвольного источника S и префиксного кода c избыточность кодирования неотрицательна, т. е. R(c,S)\ge 0.

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

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

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

-R(c,S)=H(S)-L(c,S)=\sum_{i=1}^{k}P(A_i)log \left (\frac{1}{P(A_i)2^{|c(A_i)|}}\right )

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

P(A_i)log \left (\frac{1}{P(A_i)*2^{|c(A_i)|}} \right ) \le \frac{P(A_i)}{ln2} \left (\frac{1}{P(A_i)*2^{|c(A_i)|}-1}\right ) \le \frac{1}{ln2} \left (\frac{1}{2^{|c(A_i)|}}-P(A_i) \right )

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

-R(c,S) \le \frac{1}{ln2} \left (\sum_{i=1}^{k}\frac{1}{2^{|c(A_i)|}}-\sum_{i=1}^{k}P(A_i) \right ) \le 0

причем последнее неравенство следует из неравенства Крафта (6.3) для префиксного кода и равенства \sum_{i=1}{k}P(A_i)=1. Таким образом, -R(c,S) \le 0, что доказывает утверждение теоремы.

Из доказанной теоремы следует, что энтропия источника является нижней границей средней длины кодирования. Для источников, у которых вероятности являются целыми отрицательными степенями 2, эта граница достижима. Легко проверить, что для источника с распределением вероятностей p_1 = 0,5 = 2^{-1}, p_2 = 0,25 = 2^{-2}, p_3 = p_4 = 0,125=2^{-3} средняя длина кодирования равна 1,75 и совпадает с энтропией источника.

Для доказательства второй теоремы потребуется функция [x], которая называется "потолок" и определяется выражением [x]=min\{n|n \ge x, n - целое\}. Необходимые для доказательства свойства этой функции легко следуют из ее графика, показанного на рис.6.7, и заключаются в выполнении неравенств 0 \le [x]-x<1.

График функции [x]

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

Теорема. Для каждого источника S найдется префиксный код c, избыточность которого не превышает единицы, т. е. R(c,S) \le 1.

Пусть l_i=\left [log\frac{1}{P(A_i)} \right ], где [х] функция "потолок". Тогда

\sum_{i=1}^{k}2^{-i_i} \le \sum{i=1}{k}2^{-log\frac{1}{P(A_i)}}=\sum_{i=1}^{k}P(A_i)=1

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

R(c,S)=\sum_{i=1}^{k}P(A_i) \left (\left [log\frac{1}{P(A_i)}\right ]-log\frac{1}{P(A_i)} \right ) \le \sum_{i=1}^{k}P(A_i)=1

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

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

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >
Фахруддин хемракулыев
Фахруддин хемракулыев
Шерхон Давлатов
Шерхон Давлатов

Почему тесты (1,2,3..) не работают. Хочу пройти тест но не получается