Изменения

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

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

4742 байта добавлено, 19:43, 4 сентября 2022
м
rollbackEdits.php mass rollback
При необходимости построить префиксный код с большим числом кодовых слов заданной длины проверка существования такого кода может быть достаточно сложной.Но Рассматриваемое ниже неравенство Крафта даёт достаточное условие существования префиксных и любых [[Кодирование информации | однозначно декодируемых кодов]], обладающих заданным набором показывает для каких длин кодовых словсуществует префиксный код
{{Теорема
|about=неравенство Крафта (англ. Kraft's inequality)
|statement=
Для любого [[Кодирование информации | префиксного кода]] Пусть у нас есть <tex>Cn</tex>[[Основные определения, связанные со строками|символов]], отображающего произвольный алфавит <tex>A</tex> на двоичный алфавит кодовые слова которых имеют длины <tex> l_1 \leqslant l_2 \leqslant \{0,1ldots \} leqslant l_n </tex> , длины кодовых слов должны удовлетворять неравенству:.
Тогда необходимое и достаточное условие существования префиксного кода в <tex>r</tex>-ичном алфавите для данных символов, состоит в выполнении неравенства: <center><tex> \sum\limits_{i = 1}^{In} 2r ^{-l_i} \leqslant 1 , </tex></center>где <tex>|A| = I</tex> , а <tex>l_i</tex> {{---}} длины кодовых слов.
|proof=
Рассмотрим отрезок [[file:Treeforkraft.jpg|thumb|250px|Иллюстрация к доказательству индукционного перехода]] '''Необходимость:''' Напомним, что префиксный код можно представить в виде <tex>r</tex>-ичного корневого дерева, рёбра которого соответствуют символам алфавита, а листья соответствующим кодам. Неравенство Крафта будем доказывать по [0;1[Математическая индукция|индукции]].  Для простоты рассмотрим сначала случай двоичного алфавита, то есть <tex>r = 2</tex> на числовой прямой.
Разделим его пополам'''База:''' Если максимальная длина пути на дереве равна <tex>1</tex>, то в дереве есть одно или два ребра длины <tex>1</tex>. Таким образом, причем левую половину обозначим либо <tex>M_0\dfrac{1}{2} \leqslant 1 </tex>— для одного символа источника, а правую либо <tex>M_1\dfrac{1}{2} + \dfrac{1}{2} \leqslant 1 </tex>— для двух символов источника.
Затем поделим '''Переход:''' Предположим далее, что неравенство Крафта справедливо для всех деревьев высоты меньше <tex>M_0n - 1</tex> пополам . Докажем, что оно справедливо и обозначим его левую половину для всех деревьев высоты меньше <tex>M_{00}n</tex>. Для данного дерева максимальной высоты <tex>n</tex>ребра из первой вершины ведут к двум поддеревьям, а правую высоты которых не превышают <tex>n - 1</tex>; для этих поддеревьев имеем неравенства <tex>K_1 \leqslant 1</tex> и <tex>M_{01}K_2 \leqslant 1</tex>, игде <tex>K_1, проделав то же самое с K_2</tex> — значения соответствующих им сумм. Каждая длина <tex>l_i</tex> в поддереве увеличивается на <tex>M_11</tex>, получим когда поддерево присоединяется к основному дереву, поэтому возникает дополнительный множитель <tex>M_\dfrac{101}{2}</tex>. Таким образом, а левую имеем <tex>M_\dfrac{1}{2} K_1 + \dfrac{1}{112}K_2 \leqslant 1</tex>.
Будем выполнять эти действия, пока длина индекса полученного отрезка <tex>M_j</tex> не превосходит <tex> \max(l_1, l_2,\ldots,l_I)</tex>.
Заметим, что:*любому кодовому слову В случае произвольного недвоичного основания <tex>C_jr</tex> сопоставлен свой отрезок имеется не более <tex>M_{C_j}r</tex> (Напримерребер, кодовому слову исходящих из каждой вершины, то есть не более <tex>1011r</tex> соответствует отрезок <tex>M_{1011}</tex>)поддеревьев;*длина отрезка <tex>M_{C_i}</tex> равна <tex>2^{-l_i}</tex> (Например, <tex>M_0</tex> имеет длину <tex dpi="150"> \frac{1}{2}</tex>каждое из них присоединяется к основному дереву, а <tex>M_{00}</tex> соответственно давая дополнительный множитель <tex dpi="150"> \fracdfrac{1}{4r}</tex>);*Если кодовое слово <tex>x</tex> является [[Основные определения, связанные со строками | префиксом]] кодового слова <tex>y</tex>, то отрезок <tex>M_x</tex> содержит <tex>M_y</tex> (Например, кодовое слово <tex>01</tex> является [[Основные определения, связанные со строками | префиксом]] <tex>0111</tex>, а отрезок<tex>M_{01}</tex> содержит <tex>M_{0111}</tex>, это его самая правая четверть);. Отсюда снова следует утверждение теоремы.
Рассмотрим префиксный код <tex>C</tex>'''Достаточность: так как ни одно из кодовых слов не является [[Основные определения, связанные со строками | префиксом]] никакого другого кодового слова, то никакие два отрезка не пересекаются.'''
Если [[file:Tree2forkraft.jpg|thumb|300px|Пример разбиения на отрезке группы, при <tex> r = 2</tex>, символах ''a, b, c'', где <tex>[0;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> \sumdfrac{1}{r} - \left ( r^{-l_1} + r^{-l_2} + \limits_ldots + r^{-l_{i -1}} \right ) = \dfrac{r^{l_i-1}- ( r^{l_i - l_1} + r^{l_i - l_2} + \ldots + r^{Il_i - l_{i - 1}} )} M_{C_ir^{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>\sum\limits_{i = 1}^{I} M_{C_i} = \sum\limits_{i = 1}^{I} 2^{-l_i} \leqslant 1</tex>.
}}
== Следствие Замечания ==Можно обобщить Когда имеет место строгое неравенство Крафта для случаев? Легко заметить, когда кодирующим алфавитом что если любая концевая вершина дерева является k-ичный. В доказательстве изменятся некоторые пункты:*отрезок кодовым словом, то <tex>[0;K = 1]</tex> придется делить . Строгое неравенство имеет место лишь в случае, когда некоторые из концевых вершин не используются. Однако, в случае двоичного кодового алфавита какая-нибудь концевая вершина не на <tex>2</tex>используется, то предыдущее решение оказывается лишним, и соответствующая цифра может быть удалена из каждого кодового слова, декодирование которого проходит через эту вершину. Таким образом, если имеет место строгое неравенство, то код неэффективен, а на <tex>k</tex> равных частейно для двоичных деревьев очевидно,как можно его улучшить. *соответственно неравенство примет вид: <tex>\sum\limits_{i = 1}^{I} k^{-l_i} \leqslant 1 </tex>Заметим еще раз, что теорема утверждает существование такого кода и ничего не говорит о конкретных кодах. Может существовать код, который удовлетворяет неравенству Крафта и тем не менее не является префиксным
== См.также ==
== Источники информации ==
*[http://ru.wikipedia.org/wiki/Неравенство_Крафта Википедия — Неравенство Крафта]
*[ftphttp://remotesensingbooks.sernam.ru/InfoTheory_lec05book_htc.pdf Теория информацииphp?id=35 Неравенство Крафта]* Александр Х. Шень Программирование[https: теоремы и задачи//xlinux. {{---}} Мnist.: МЦНМО, 2007gov/dads/HTML/kraftsinqlty. {{---}} С. 208. {{---}} ISBN 978-5-94057-310-4html Kraft's inequality]
[[Категория: Дискретная математика и алгоритмы]]
[[Категория: Алгоритмы сжатия]]
1632
правки

Навигация