1632
правки
Изменения
м
== Предварительные определения ==
{{Определение
|definition=
Пусть заданы два произвольных конечных множества, которые называются, соответственно, '''кодируемым алфавитом''' и '''кодирующим алфавитом'''. Их элементы называются '''символами''', а строки (последовательности конечной длины) символов — '''словами'''. Длина слова — это число символов, из которого оно состоит.}}
В качестве кодирующего алфавита часто рассматривается множество <tex>\{0, 1\}</tex> — так называемый двоичный или бинарный алфавит.
{{Определение |definition='''Кодом''' Рассматриваемое ниже неравенство Крафта показывает для алфавита <tex>A</tex> называется функция <tex>C</tex>, которая для каждого символа <tex>x</tex> из <tex>A</tex> указывает слово <tex>C(x)</tex>, кодирующее этот символкаких длин кодовых слов существует префиксный код.}}
{{Определение
|definition=
'''Префиксным кодом''' называется код, в котором ни одно из кодовых слов не является префиксом никакого другого кодового слова.}}
== Неравенство Крафта ==
Для любого префиксного кода Пусть у нас есть <tex>Cn</tex>[[Основные определения, отображающего произвольный алфавит <tex>A</tex> на двоичный алфавит связанные со строками|символов]], кодовые слова которых имеют длины <tex> l_1 \leqslant l_2 \leqslant \{0,1ldots \} leqslant l_n </tex> , длины кодовых слов должны удовлетворять неравенству:.
Рассмотрим отрезок <tex>[0;1[file:Treeforkraft.jpg|thumb|250px|Иллюстрация к доказательству индукционного перехода]]</tex> на числовой прямой.
Разделим его пополам, причем левую половину обозначим <tex>M_0</tex>, а правую <tex>M_1</tex>.'''Необходимость:'''
Затем поделим <tex>M_0</tex> пополам и обозначим его левую половину <tex>M_{00}</tex>, а правую <tex>M_{01}</tex>, иНапомним, проделав то же самое с что префиксный код можно представить в виде <tex>M_1r</tex>-ичного корневого дерева, получим <tex>M_{10}</tex>рёбра которого соответствуют символам алфавита, а левую <tex>M_{11}</tex>листья соответствующим кодам. Неравенство Крафта будем доказывать по [[Математическая индукция|индукции]].
Будем выполнять эти действияДля простоты рассмотрим сначала случай двоичного алфавита, пока длина индекса полученного отрезка то есть <tex>M_j</tex> не превосходит <tex>max(l_1, l_2,\ldots,l_I)r = 2</tex>.
Заметим, что'''База:*любому кодовому слову ''' Если максимальная длина пути на дереве равна <tex>C_j1</tex> сопоставлен свой отрезок , то в дереве есть одно или два ребра длины <tex>M_{C_j}1</tex> (Например. Таким образом, кодовому слову либо <tex>1011</tex> соответствует отрезок <tex>M_\dfrac{10111}</tex>);*длина отрезка <tex>M_{C_i}</tex> равна <tex>2^{-l_i}\leqslant 1 </tex> (Например— для одного символа источника, <tex>M_0</tex> имеет длину либо <tex>\frac12</tex>, а <tex>M_dfrac{1}{002}</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_dfrac{011}</tex> содержит <tex>M_{01112}\leqslant 1 </tex>, это его самая правая четверть);— для двух символов источника.
Рассмотрим префиксный код '''Переход:''' Предположим далее, что неравенство Крафта справедливо для всех деревьев высоты меньше <tex>n - 1</tex>. Докажем, что оно справедливо и для всех деревьев высоты меньше <tex>n</tex>. Для данного дерева максимальной высоты <tex>Cn</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>[0;1]</tex> выбрать некоторое количество непересекающихся отрезков, то очевидно, что сумма их длин не превзойдет <tex>1</tex>, то есть <tex> \sum\limits_{i = 1}^{I} M_{C_i} \le 1</tex>.
rollbackEdits.php mass rollback
{{Теорема
|about=неравенство Крафта
|statement=
Тогда необходимое и достаточное условие существования префиксного кода в <tex>r</tex>-ичном алфавите для данных символов, состоит в выполнении неравенства: <center><tex> \sum\limits_{i = 1}^{In} 2r ^{-l_i} \le leqslant 1 , </tex></center>где <tex>|A| = I</tex> , а <tex>l_i</tex> {{---}} длины кодовых слов.
|proof=
В случае произвольного недвоичного основания <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_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^{I-l_1} M_+ r^{C_i-l_2} = + \sum\limits_ldots + r^{-l_{i -1}} \right ) = \dfrac{r^{l_i-1}- ( r^{Il_i - l_1} 2+ 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 \le 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> .
}}
== Следствие Замечания ==Можно обобщить Когда имеет место строгое неравенство Крафта для случаев? Легко заметить, когда кодирующим алфавитом что если любая концевая вершина дерева является 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. 208gov/dads/HTML/kraftsinqlty.html Kraft's inequality]
[[Категория: Дискретная математика и алгоритмы]]
[[Категория: Алгоритмы сжатия]]