Неравенство Крафта — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(полное переписывание статьи)
Строка 1: Строка 1:
+
 
При необходимости построить префиксный код с большим числом кодовых слов заданной длины проверка существования такого кода может быть достаточно сложной.
+
Рассматриваемое ниже неравенство Крафта показывает, для каких длин кодовых слов существует префиксный код, но не показывает, как его строить.
Но неравенство Крафта даёт достаточное условие существования префиксных и любых [[Кодирование информации | однозначно декодируемых кодов]], обладающих заданным набором длин кодовых слов.
 
 
{{Теорема
 
{{Теорема
|about=неравенство Крафта (англ. Kraft's inequality)
+
|about=неравенство Крафта  
 
|statement=
 
|statement=
Для любого [[Кодирование информации | префиксного кода]] <tex>C</tex>, отображающего произвольный алфавит <tex>A</tex> на двоичный алфавит <tex> \{0,1\} </tex> , длины кодовых слов должны удовлетворять неравенству:
+
Необходимое и достаточное условие существования префиксного кода для источника с алфавитом <tex>S</tex> из <tex>q</tex> символов  <tex>s_i</tex>, где  <tex>i\in \left [ 1, q \right ]</tex>, кодовые слова которого имеют длины <tex>l_1 \leq l_2 \leq ... \leq l_q</tex>, состоит в выполнении неравенства:
  
<center><tex> \sum\limits_{i = 1}^{I} 2^{-l_i} \leqslant 1 , </tex></center>
+
<center><tex> \sum\limits_{i = 1}^{q} r ^{-l_i} \leqslant 1 </tex></center>
где <tex>|A| = I</tex> , а <tex>l_i</tex> {{---}} длины кодовых слов.
+
где <tex>r</tex> - основание (число символов) в кодовом алфавите.
  
 
|proof=  
 
|proof=  
  
Рассмотрим отрезок <tex>[0;1]</tex> на числовой прямой.
+
[[file:Treeforkraft.jpg|thumb|250px|Иллюстрация к доказательству индукционного перехода]]
 +
Неравенство Крафта легко доказать с помощью дерева декодирования, существование которого следует из существования префиксного кода. Будем рассуждать по [[Математическая индукция|индукции]].  
  
Разделим его пополам, причем левую половину обозначим <tex>M_0</tex>, а правую <tex>M_1</tex>.
+
Для простоты рассмотрим сначала случай двоичного алфавита, т. е. <tex>r = 2</tex>. Если максимальная длина пути на дереве равна 1, то на нем есть одно или два ребра длины 1. Таким образом, либо <tex> \frac{1}{2} \leq 1 </tex> — для одного символа источника, либо <tex> \frac{1}{2} + \frac{1}{2} \leq 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>n</tex>. Для данного дерева максимальной длины <tex>n</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> в поддереве увеличивается на 1, когда поддерево присоединяется к основному дереву, поэтому возникает дополнительный множитель <tex>\frac{1}{2}</tex>. Таким образом, имеем <tex>\frac{1}{2} K_1 + \frac{1}{2} K_2 \leq 1</tex>.
  
Будем выполнять эти действия, пока длина индекса полученного отрезка <tex>M_j</tex> не превосходит <tex> \max(l_1, l_2,\ldots,l_I)</tex>.
+
В случае произвольного недвоичного основания <tex>r</tex> имеется не более <tex>r</tex> ребер, исходящих из каждой вершины, т. е. не более <tex>r</tex> поддеревьев; каждое из них присоединяется к основному дереву, давая дополнительный множитель <tex>\frac{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 dpi="150"> \frac{1}{2}</tex>, а <tex>M_{00}</tex> соответственно <tex dpi="150"> \frac{1}{4}</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>: так как ни одно из кодовых слов не является [[Основные определения, связанные со строками | префиксом]] никакого другого кодового слова, то никакие два отрезка не пересекаются.
+
== Замечания ==
  
Если на отрезке <tex>[0;1]</tex> выбрать некоторое количество непересекающихся отрезков, то очевидно, что сумма их длин не превзойдет <tex>1</tex>, то есть <tex> \sum\limits_{i = 1}^{I} M_{C_i} \leqslant 1</tex>.
+
Когда имеет место строгое неравенство? Легко заметить, что если любая концевая вершина дерева является кодовым словом, то <tex>K = 1</tex>. Строгое неравенство имеет место лишь в случае, когда некоторые из концевых вершин не используются. Однако, в случае двоичного кодового алфавита какая-нибудь концевая вершина не используется, то предыдущее решение оказывается лишним, и соответствующая цифра может быть удалена из каждого кодового слова, декодирование которого проходит через эту вершину. Таким образом, если имеет место строгое неравенство, то код неэффективен, но для двоичных деревьев очевидно, как можно его улучшить.
 +
 
 +
Заметим еще раз, что теорема утверждает существование такого кода и ничего не говорит о конкретных кодах. Может существовать код, который удовлетворяет неравенству Крафта и тем не менее не является мгновенным.
  
Отсюда следует, что <tex>\sum\limits_{i = 1}^{I} M_{C_i} = \sum\limits_{i = 1}^{I} 2^{-l_i} \leqslant 1</tex>.
 
 
}}
 
}}
 
== Следствие ==
 
Можно обобщить неравенство Крафта для случаев, когда кодирующим алфавитом является k-ичный. В доказательстве изменятся некоторые пункты:
 
*отрезок <tex>[0;1]</tex> придется делить не на <tex>2</tex>, а на <tex>k</tex> равных частей,
 
*соответственно неравенство примет вид: <tex>\sum\limits_{i = 1}^{I} k^{-l_i} \leqslant 1 </tex>.
 
  
 
== См.также ==
 
== См.также ==
Строка 42: Строка 34:
 
== Источники информации ==
 
== Источники информации ==
 
*[http://ru.wikipedia.org/wiki/Неравенство_Крафта Википедия — Неравенство Крафта]
 
*[http://ru.wikipedia.org/wiki/Неравенство_Крафта Википедия — Неравенство Крафта]
*[ftp://remotesensing.ru/InfoTheory_lec05.pdf Теория информации]
+
*[http://books.sernam.ru/book_htc.php?id=35 Неравенство Крафта]
* Александр Х. Шень Программирование: теоремы и задачи. {{---}} М.: МЦНМО, 2007. {{---}} С. 208. {{---}} ISBN 978-5-94057-310-4
+
*[https://xlinux.nist.gov/dads/HTML/kraftsinqlty.html Kraft's inequality]
  
 
[[Категория: Дискретная математика и алгоритмы]]
 
[[Категория: Дискретная математика и алгоритмы]]
 
[[Категория: Алгоритмы сжатия]]
 
[[Категория: Алгоритмы сжатия]]

Версия 04:47, 29 декабря 2017

Рассматриваемое ниже неравенство Крафта показывает, для каких длин кодовых слов существует префиксный код, но не показывает, как его строить.

Теорема (неравенство Крафта):
Необходимое и достаточное условие существования префиксного кода для источника с алфавитом [math]S[/math] из [math]q[/math] символов [math]s_i[/math], где [math]i\in \left [ 1, q \right ][/math], кодовые слова которого имеют длины [math]l_1 \leq l_2 \leq ... \leq l_q[/math], состоит в выполнении неравенства:
[math] \sum\limits_{i = 1}^{q} r ^{-l_i} \leqslant 1 [/math]
где [math]r[/math] - основание (число символов) в кодовом алфавите.
Доказательство:
[math]\triangleright[/math]
Иллюстрация к доказательству индукционного перехода

Неравенство Крафта легко доказать с помощью дерева декодирования, существование которого следует из существования префиксного кода. Будем рассуждать по индукции.

Для простоты рассмотрим сначала случай двоичного алфавита, т. е. [math]r = 2[/math]. Если максимальная длина пути на дереве равна 1, то на нем есть одно или два ребра длины 1. Таким образом, либо [math] \frac{1}{2} \leq 1 [/math] — для одного символа источника, либо [math] \frac{1}{2} + \frac{1}{2} \leq 1 [/math] - для двух символов источника.

Предположим далее, что неравенство Крафта справедливо для всех деревьев длины меньше [math]n[/math]. Для данного дерева максимальной длины [math]n[/math] ребра из первой вершины ведут к двум поддеревьям, длины которых не превышают [math]n - 1[/math]; для этих поддеревьев имеем неравенства [math]K_1 \leq 1[/math] и [math]K_2 \leq 1[/math], где [math]K_1, K_2[/math] - значения соответствующих им сумм. Каждая длина [math]l_i[/math] в поддереве увеличивается на 1, когда поддерево присоединяется к основному дереву, поэтому возникает дополнительный множитель [math]\frac{1}{2}[/math]. Таким образом, имеем [math]\frac{1}{2} K_1 + \frac{1}{2} K_2 \leq 1[/math].

В случае произвольного недвоичного основания [math]r[/math] имеется не более [math]r[/math] ребер, исходящих из каждой вершины, т. е. не более [math]r[/math] поддеревьев; каждое из них присоединяется к основному дереву, давая дополнительный множитель [math]\frac{1}{r}[/math]. Отсюда снова следует утверждение теоремы.


Замечания

Когда имеет место строгое неравенство? Легко заметить, что если любая концевая вершина дерева является кодовым словом, то [math]K = 1[/math]. Строгое неравенство имеет место лишь в случае, когда некоторые из концевых вершин не используются. Однако, в случае двоичного кодового алфавита какая-нибудь концевая вершина не используется, то предыдущее решение оказывается лишним, и соответствующая цифра может быть удалена из каждого кодового слова, декодирование которого проходит через эту вершину. Таким образом, если имеет место строгое неравенство, то код неэффективен, но для двоичных деревьев очевидно, как можно его улучшить.

Заметим еще раз, что теорема утверждает существование такого кода и ничего не говорит о конкретных кодах. Может существовать код, который удовлетворяет неравенству Крафта и тем не менее не является мгновенным.
[math]\triangleleft[/math]

См.также

Источники информации