Изменения

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

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

4450 байт добавлено, 19:43, 4 сентября 2022
м
rollbackEdits.php mass rollback
== Предварительные определения ==
{{Определение
|definition=
'''Кодом''' для алфавита <tex>A</tex> называется функция(таблица) <tex>C(X)</tex>, которая для каждого символа <tex>x</tex> из <tex>A</tex> указывает слово <tex>C(x)</tex>, кодирующее этот символ.}}
{{Определение
|definition=
Пусть заданы два произвольных конечных множества, которые называются, соответственно, '''кодируемым алфавитом''' и '''кодирующим алфавитом'''. Их элементы называются '''символами''', а строки (последовательности конечной длины) символов — '''словами'''. Длина слова — это число символов, из которого оно состоит.}}
В качестве кодирующего алфавита часто рассматривается множество <tex>\{0, 1\}</tex> — так называемый двоичный или бинарный алфавит.
{{Определение |definition='''Префиксным кодом''' называется алфавитный код, в котором ни одно из Рассматриваемое ниже неравенство Крафта показывает для каких длин кодовых слов не является префиксом никакого другого кодового словасуществует префиксный код.}}
== Неравенство Крафта ==
{{Теорема
|about=неравенство Крафта
|statement=
Для любого префиксного кода Пусть у нас есть <tex>C(X)n</tex>[[Основные определения, отображающего произвольный алфавит <tex>A_x</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} \le leqslant 1 , </tex></center>где <tex>|A_x| = 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> \dfrac{1}{2} \leqslant 1 </tex> — для одного символа источника, либо <tex> \dfrac{1}{2} + \dfrac{1}{2} \leqslant 1 </tex> — для двух символов источника.
Разделим его пополам'''Переход:''' Предположим далее, причем левую половину обозначим что неравенство Крафта справедливо для всех деревьев высоты меньше <tex>M_0n - 1</tex>. Докажем, а правую что оно справедливо и для всех деревьев высоты меньше <tex>M_1n</tex>. Для данного дерева максимальной высоты <tex>n</tex> ребра из первой вершины ведут к двум поддеревьям, высоты которых не превышают <tex>n - 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>\dfrac{1}{2}</tex>. Таким образом, имеем <tex>\dfrac{1}{2} K_1 + \dfrac{1}{2} K_2 \leqslant 1</tex>.
Затем поделим <tex>M_0</tex> пополам и обозначим его левую половину <tex>M_{00}</tex>, а правую <tex>M_{01}</tex>, и, проделав то же самое с <tex>M_1</tex>, получим <tex>M_{10}</tex>, а левую <tex>M_{11}</tex>.
Будем выполнять эти действия, пока длина индекса полученного отрезка В случае произвольного недвоичного основания <tex>M_jr</tex> имеется не превосходит более <tex>max(l_1r</tex> ребер, l_2исходящих из каждой вершины, то есть не более <tex>r</tex> поддеревьев; каждое из них присоединяется к основному дереву,давая дополнительный множитель <tex>\ldots,l_I)dfrac{1}{r}</tex>. Отсюда снова следует утверждение теоремы.
Заметим, что'''Достаточность:*любому кодовому слову <tex>C_j</tex> сопоставлен свой отрезок <tex>M_{C_j}</tex> (Например, кодовому слову <tex>1011</tex> соответствует отрезок <tex>M_{1011}</tex>);*длина отрезка <tex>M_{C_i}</tex> равна <tex>2^{-l_i}</tex> (Например, <tex>M_0</tex> имеет длину <tex>\frac12</tex>, а <tex>M_{00}</tex> соответственно <tex>\frac14</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>, это его самая правая четверть);'''
Рассмотрим префиксный код [[file:Tree2forkraft.jpg|thumb|300px|Пример разбиения на группы, при <tex>C(X)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>[0;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^{Il_i - l_1} M_+ r^{C_il_i - l_2} + \le 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>\sum\limits_{i = 1}^{I} M_{C_i} = \sum\limits_{i = 1}^{I} 2^{-l_i} \le 1</tex>.
}}
== Следствие Замечания ==Можно обобщить Когда имеет место строгое неравенство Крафта для случаев? Легко заметить, когда кодирующим алфавитом что если любая концевая вершина дерева является k-ичный. В доказательстве изменятся некоторые пункты:*отрезок кодовым словом, то <tex>[0;K = 1]</tex> придется делить . Строгое неравенство имеет место лишь в случае, когда некоторые из концевых вершин не на <tex>2</tex>используются. Однако, в случае двоичного кодового алфавита какая-нибудь концевая вершина не используется, то предыдущее решение оказывается лишним, и соответствующая цифра может быть удалена из каждого кодового слова, декодирование которого проходит через эту вершину. Таким образом, если имеет место строгое неравенство, то код неэффективен, но для двоичных деревьев очевидно, а на <tex>k</tex> равных частей;как можно его улучшить. *соответственно неравенство примет вид: <tex>\sum\limits_{i = 1}^{I} k^{-l_i} \le 1 </tex>Заметим еще раз, что теорема утверждает существование такого кода и ничего не говорит о конкретных кодах. Может существовать код, который удовлетворяет неравенству Крафта и тем не менее не является префиксным
== Ссылки См.также ==*[http://ru.wikipedia.org/wiki/Неравенство_Крафта [Неравенство Крафта — ВикипедияМакмиллана]]*ftp://remotesensing.ru/InfoTheory_lec05.pdf
== Литература Источники информации ==*А[http://ru.wikipedia.Шень "Программированиеorg/wiki/Неравенство_Крафта Википедия — Неравенство Крафта]*[http: теоремы и задачи"//books.sernam.ru/book_htc.php?id=35 Неравенство Крафта]*[https://xlinux.nist.gov/dads/HTML/kraftsinqlty.html Kraft's inequality]
[[Категория: Дискретная математика и алгоритмы]]
[[Категория: Алгоритмы сжатия]]
1632
правки

Навигация