Изменения

Перейти к: навигация, поиск

Неравенство Крафта

4182 байта добавлено, 19:43, 4 сентября 2022
м
rollbackEdits.php mass rollback
Рассматриваемое ниже неравенство Крафта показывает, для каких длин кодовых слов существует префиксный код, но приведенное ниже доказательство не является конструктивным
{{Теорема
|about=неравенство Крафта
|statement=
Необходимое и достаточное условие существования префиксного кода для источника с алфавитом Пусть у нас есть <tex>Sn</tex> из <tex>q</tex> символов <tex>s_i</tex>, где <tex>i\in \left [ 1[Основные определения, q \right связанные со строками|символов]]</tex>, кодовые слова которого которых имеют длины <tex>l_1 \leq leqslant l_2 \leq ... leqslant \ldots \leq l_qleqslant l_n </tex>, состоит в выполнении неравенства:.
Тогда необходимое и достаточное условие существования префиксного кода в <tex>r</tex>-ичном алфавите для данных символов, состоит в выполнении неравенства: <center><tex> \sum\limits_{i = 1}^{qn} r ^{-l_i} \leqslant 1 </tex></center>где <tex>r</tex> — основание (число символов) в кодовом алфавите.
|proof=
[[file:Treeforkraft.jpg|thumb|250px|Иллюстрация к доказательству индукционного перехода]]
Неравенство Крафта легко доказать с помощью дерева декодирования, существование которого следует из существования префиксного кода. Будем рассуждать по [[Математическая индукция|индукции]].
Для простоты рассмотрим сначала случай двоичного алфавита'''Необходимость:''' Напомним, т. е. что префиксный код можно представить в виде <tex>r = 2</tex>-ичного корневого дерева, рёбра которого соответствуют символам алфавита, а листья соответствующим кодам. Неравенство Крафта будем доказывать по [[Математическая индукция|индукции]]. Если максимальная длина пути на дереве равна <tex>1</tex> Для простоты рассмотрим сначала случай двоичного алфавита, то в дереве есть одно или два ребра длины <tex>1</tex>. Таким образом, либо <tex> \frac{1}{2} \leq 1 </tex> — для одного символа источника, либо <tex> \frac{1}{2} + \frac{1}{r = 2} \leq 1 </tex> — для двух символов источника.
Предположим далее, что неравенство Крафта справедливо для всех деревьев длины меньше '''База:''' Если максимальная длина пути на дереве равна <tex>n</tex>. Для данного дерева максимальной длины <tex>n1</tex> , то в дереве есть одно или два ребра из первой вершины ведут к двум поддеревьям, длины которых не превышают <tex>n - 1</tex>; для этих поддеревьев имеем неравенства <tex>K_1 \leq 1</tex> и <tex>K_2 \leq 1</tex>, где <tex>K_1, K_2</tex> — значения соответствующих им сумм. Каждая длина <tex>l_i</tex> в поддереве увеличивается на <tex>1</tex>Таким образом, когда поддерево присоединяется к основному дереву, поэтому возникает дополнительный множитель либо <tex>\fracdfrac{1}{2}\leqslant 1 </tex>. Таким образом— для одного символа источника, имеем либо <tex>\fracdfrac{1}{2} K_1 + \fracdfrac{1}{2} K_2 \leq leqslant 1</tex>— для двух символов источника.
В случае произвольного недвоичного основания '''Переход:''' Предположим далее, что неравенство Крафта справедливо для всех деревьев высоты меньше <tex>n - 1</tex>. Докажем, что оно справедливо и для всех деревьев высоты меньше <tex>rn</tex> имеется не более . Для данного дерева максимальной высоты <tex>rn</tex> ребер, исходящих ребра из каждой первой вершиныведут к двум поддеревьям, т. е. высоты которых не более превышают <tex>rn - 1</tex> ; для этих поддеревьев; каждое из них имеем неравенства <tex>K_1 \leqslant 1</tex> и <tex>K_2 \leqslant 1</tex>, где <tex>K_1, K_2</tex> — значения соответствующих им сумм. Каждая длина <tex>l_i</tex> в поддереве увеличивается на <tex>1</tex>, когда поддерево присоединяется к основному дереву, давая поэтому возникает дополнительный множитель <tex>\fracdfrac{1}{r2}</tex>. Отсюда снова следует утверждение теоремыТаким образом, имеем <tex>\dfrac{1}{2} K_1 + \dfrac{1}{2} K_2 \leqslant 1</tex>.
 
В случае произвольного недвоичного основания <tex>r</tex> имеется не более <tex>r</tex> ребер, исходящих из каждой вершины, то есть не более <tex>r</tex> поддеревьев; каждое из них присоединяется к основному дереву, давая дополнительный множитель <tex>\dfrac{1}{r}</tex>. Отсюда снова следует утверждение теоремы.
 
'''Достаточность:'''
 
[[file:Tree2forkraft.jpg|thumb|300px|Пример разбиения на группы, при <tex> r = 2</tex>, символах ''a, b, c'', где <tex> l_a = 2, l_b = 2, l_c = 1</tex>]]
 
#Если некоторое <tex> l_i = 0 </tex> , то <tex> n = 1 </tex> . В таком случае пустая строка является искомым префиксным кодом. Далее все <tex> l_i \geqslant 1 </tex> .
#Для доказательства корректности разделим длины <tex> l_i </tex> на <tex>r</tex> , возможно пустых, групп, внутри каждой из которых <tex> \sum\limits r ^{-l_i} \leqslant \dfrac{1}{r} </tex> .
#:Пусть у нас есть <tex>n</tex> символов, кодовые слова имеют длины <tex>l_1 \leqslant l_2 \leqslant \ldots \leqslant l_n </tex>. Давайте разделим данные символы на <tex>r</tex> групп, внутри каждой из которых <tex> \sum\limits r ^{-l_i} \leqslant \dfrac{1}{r} </tex> . Разделить символы на группы можно следующим жадным образом: брать <tex> l_i </tex> в порядке увеличения индекса.
#:Докажем, что в таком случае группа будет либо полностью укомплектована <tex>(\sum\limits r ^{-l_i} = \dfrac{1}{r})</tex>, либо будут исчерпаны все возможные <tex> l_i </tex> . Это следует из того, что при <tex> l_i \geqslant 1 </tex> на <tex>i</tex>-ом шаге либо группа уже укомплектована, либо ее остаток равен:
#: <center><tex> \dfrac{1}{r} - \left ( r^{-l_1} + r^{-l_2} + \ldots + r^{-l_{i-1}} \right ) = \dfrac{r^{l_i-1} - ( r^{l_i - l_1} + r^{l_i - l_2} + \ldots + r^{l_i - l_{i - 1}} )}{r^{l_i}}</tex></center>
#:Так как группа не укомплектована, то числитель положителен. Если добавим <tex> l_i </tex> в группу, то числитель уменьшится на <tex>1</tex>, где <tex>l_i - l_j</tex> неотрицательно при <tex> i \geqslant j </tex> , и <tex> r \in \mathbb{N} </tex>. Следовательно числитель — натуральное число. Тогда, взяв <tex> l_i </tex> в группу, мы не перепрыгнем через максимальное значение, то есть сумма группы <tex> \leqslant \dfrac{1}{r} </tex> . А значит, создавая группы по данному алгоритму мы сможем построить <tex>r</tex> групп, удовлетворяющих условию.
#Выберем для каждой группы свой начальный символ. Запуститим данную процедуру для каждой группы слов, предварительно обрезав первую букву.
#По индукции по величине <tex> l_n </tex> докажем, что наш алгоритм корректен.
#:'''База:''' При <tex> l_n = 0 </tex> корректность процедуры очевидна.
#:'''Переход: ''' Допустим, что процедура корректна для <tex> l_n = w </tex> . Докажем, что процедура корректна и для <tex> l_n = w + 1 </tex> .
#:Заметим, что у слов каждой группы будет своя начальная буква, поэтому достаточно проверить префиксность кода для каждой группы. А это истинно по предположению индукции, где для каждой группы <tex> l_i \leqslant w </tex> .
 
}}
== Замечания ==
Когда имеет место строгое неравенство? Легко заметить, что если любая концевая вершина дерева является кодовым словом, то <tex>K = 1</tex>. Строгое неравенство имеет место лишь в случае, когда некоторые из концевых вершин не используются. Однако, в случае двоичного кодового алфавита какая-нибудь концевая вершина не используется, то предыдущее решение оказывается лишним, и соответствующая цифра может быть удалена из каждого кодового слова, декодирование которого проходит через эту вершину. Таким образом, если имеет место строгое неравенство, то код неэффективен, но для двоичных деревьев очевидно, как можно его улучшить.
Заметим еще раз, что теорема утверждает существование такого кода и ничего не говорит о конкретных кодах. Может существовать код, который удовлетворяет неравенству Крафта и тем не менее не является мгновеннымпрефиксным.
}}
== См.также ==
1632
правки

Навигация