Неравенство Макмиллана — различия между версиями
Krotser (обсуждение | вклад) (→Литература) |
Krotser (обсуждение | вклад) (→Неравенство Макмиллана) |
||
Строка 15: | Строка 15: | ||
{{Теорема | {{Теорема | ||
|statement= | |statement= | ||
− | <tex> \sum\limits_{i = 1}^{ | + | <tex> \sum\limits_{i = 1}^{|A|} 2^{-l_i} \le 1</tex> (где <tex>l_i</tex> {{---}} длины кодовых слов) выполняется не только для любого префиксного кода, но и вообще для любого однозначного кода. |
|proof= | |proof= | ||
Есть разные способы решить эту задачу, но будет приведено простое и красивое, хотя и несколько загадочное, решение. <br /> | Есть разные способы решить эту задачу, но будет приведено простое и красивое, хотя и несколько загадочное, решение. <br /> | ||
Строка 24: | Строка 24: | ||
Например, для кода со словами <tex>0,10,11</tex> (которые теперь записываются как <tex>a,ba,bb</tex>) и для <tex>N=2</tex> получаем <tex>(a+ba+bb)^2</tex><tex>=</tex> | Например, для кода со словами <tex>0,10,11</tex> (которые теперь записываются как <tex>a,ba,bb</tex>) и для <tex>N=2</tex> получаем <tex>(a+ba+bb)^2</tex><tex>=</tex> | ||
− | <tex>=(a+ba+bb) | + | <tex>=(a+ba+bb)\times{(a+ba+bb)}=aa+aba+abb+baa+baba+babb+bba+bbba+bbbb.</tex> В этом примере все одночлены в правой части различны (если не переставлять переменные), и это не случайно: так будет для любого однозначного кода. В самом деле, по определению однозначности никакое слово не может быть получено двумя способами при соединении кодовых слов. |
− | Теперь подставим <tex>a=b=\frac{1}{2}</tex> в наше неравенство (если оно верно для букв, то оно верно и для любых их числовых значений). Слева получится <tex>(2^{-n_1}+2^{-n_2}+...+2^{-n_i})^N</tex> (в скобке как раз выражение из неравенства Крафта{{---}}Макмиллана). Правую часть мы оценим сверху, сгруппировав слова по длинам: имеется не более <tex>2^l</tex> слагаемых длины <tex>l</tex>, каждое из которых равно <tex>2^{-l}</tex>, и потому слагаемые данной длины в сумме не превосходят единицы, а правая часть не превосходит максимальной длины слагаемых, то есть <tex>N | + | Теперь подставим <tex>a=b=\frac{1}{2}</tex> в наше неравенство (если оно верно для букв, то оно верно и для любых их числовых значений). Слева получится <tex>(2^{-n_1}+2^{-n_2}+...+2^{-n_i})^N</tex> (в скобке как раз выражение из неравенства Крафта{{---}}Макмиллана). Правую часть мы оценим сверху, сгруппировав слова по длинам: имеется не более <tex>2^l</tex> слагаемых длины <tex>l</tex>, каждое из которых равно <tex>2^{-l}</tex>, и потому слагаемые данной длины в сумме не превосходят единицы, а правая часть не превосходит максимальной длины слагаемых, то есть <tex>N\times{\max(n_i)}</tex>. Итак, получаем, что <tex>(2^{-n_1}+2^{-n_2}+...+2^{-n_i})^N<N\times{\max(n_i)}</tex> и это верно при любом <tex>N</tex>. Если основание степени в левой части больше единицы, то при больших <tex>N</tex> это неравенство нарушится (показательная функция растет быстрее линейной). Поэтому, для однозначного кода выполняется неравенство Крафта{{---}}Макмиллана. Что и требовалось доказать. |
}} | }} | ||
Версия 05:08, 31 октября 2011
Необходимые определения
Определение: |
Пусть заданы два произвольных конечных множества, которые называются, соответственно, кодируемым алфавитом и кодирующим алфавитом. Их элементы называются символами, а строки (последовательности конечной длины) символов — словами. Длина слова — это число символов, из которого оно состоит. |
В качестве кодирующего алфавита часто рассматривается множество
— так называемый двоичный или бинарный алфавит.
Определение: |
Кодом для алфавита | называется функция , которая для каждого символа из указывает слово , кодирующее этот символ.
Определение: |
Код называется однозначным, если никаким двум словам кодируемого алфавита не может быть сопоставлен один и тот же код.. |
Неравенство Макмиллана
Теорема: |
(где — длины кодовых слов) выполняется не только для любого префиксного кода, но и вообще для любого однозначного кода. |
Доказательство: |
Есть разные способы решить эту задачу, но будет приведено простое и красивое, хотя и несколько загадочное, решение. Вместо нулей и единиц будем использовать и (из чего составлять коды разницы нет). Запишем формально сумму всех кодовых слов как алгебраическое выражение (многочлен от и , в котором одночлены записаны как произведения переменных и , без возведения в степень). Теперь (ещё более странное на первый взгляд действие) возведём это в степень (произвольное натуральное число) и раскроем скобки, сохраняя порядок переменных (не собирая вместе одинаковые переменные) в одночленах: сумма одночленов.Например, для кода со словами (которые теперь записываются как ) и для получаемТеперь подставим В этом примере все одночлены в правой части различны (если не переставлять переменные), и это не случайно: так будет для любого однозначного кода. В самом деле, по определению однозначности никакое слово не может быть получено двумя способами при соединении кодовых слов. в наше неравенство (если оно верно для букв, то оно верно и для любых их числовых значений). Слева получится (в скобке как раз выражение из неравенства Крафта—Макмиллана). Правую часть мы оценим сверху, сгруппировав слова по длинам: имеется не более слагаемых длины , каждое из которых равно , и потому слагаемые данной длины в сумме не превосходят единицы, а правая часть не превосходит максимальной длины слагаемых, то есть . Итак, получаем, что и это верно при любом . Если основание степени в левой части больше единицы, то при больших это неравенство нарушится (показательная функция растет быстрее линейной). Поэтому, для однозначного кода выполняется неравенство Крафта—Макмиллана. Что и требовалось доказать. |
Ссылки
Литература
Шень А. Х. Программирование: теоремы и задачи. — М.: МЦНМО, 2011. С. 206 - 210. ISBN 978-5-94057-696-9