Неравенство Макмиллана — различия между версиями
Krotser (обсуждение | вклад) (Новая страница: «== Необходимые определения == Пусть нам дан '''''алфавит''''', то есть конечное множество, элеме...») |
Krotser (обсуждение | вклад) (→Неравенство Макмиллана) |
||
Строка 9: | Строка 9: | ||
[http://neerc.ifmo.ru/mediawiki/index.php/%D0%9D%D0%B5%D1%80%D0%B0%D0%B2%D0%B5%D0%BD%D1%81%D1%82%D0%B2%D0%BE_%D0%9A%D1%80%D0%B0%D1%84%D1%82%D0%B0 Неравенство Крафта-Макмиллана] выполняется не только для любого префиксного кода, но и вообще для любого однозначного кода. | [http://neerc.ifmo.ru/mediawiki/index.php/%D0%9D%D0%B5%D1%80%D0%B0%D0%B2%D0%B5%D0%BD%D1%81%D1%82%D0%B2%D0%BE_%D0%9A%D1%80%D0%B0%D1%84%D1%82%D0%B0 Неравенство Крафта-Макмиллана] выполняется не только для любого префиксного кода, но и вообще для любого однозначного кода. | ||
</center> | </center> | ||
+ | <center><tex> \sum\limits_{i = 1}^{I} 2^{-l_i} \le 1 , </tex></center> | ||
+ | <center>где <tex>|A| = I</tex> , а <tex>l_i</tex> {{---}} длины кодовых слов.</center> | ||
}} | }} | ||
''Примечание: Именно это доказал Макмиллан, Крафт доказал неравенство для префиксных кодов.'' | ''Примечание: Именно это доказал Макмиллан, Крафт доказал неравенство для префиксных кодов.'' | ||
+ | |||
== Доказательство == | == Доказательство == | ||
Есть разные способы решить эту задачу, но будет приведено простое и красивое, хотя и несколько загадочное, решение. <br /> | Есть разные способы решить эту задачу, но будет приведено простое и красивое, хотя и несколько загадочное, решение. <br /> |
Версия 23:35, 30 октября 2011
Содержание
Необходимые определения
Пусть нам дан алфавит, то есть конечное множество, элементы которого называются символами или буквами этого алфавита. Кодом для алфавита
называется функция (таблица) , которая для каждого символа из указывает двоичное слово , называемое кодовым словом, или просто кодом этого символа. (Двоичное слово - конечная последовательность нулей и единиц.) Не требуется, чтобы коды всех символов имели равные длины.Хороший код должен позволять декодирование(восстановление последовательности символов по ее коду). Пусть фиксирован алфавит
и код для этого алфавита. Для каждого слова в алфавите (то есть для любой конечной последовательности букв алфавита ) рассмотрим двоичное слово , которое получается, если записать подряд коды всех букв из (без каких либо разделителей). Код называется однозначным, если коды различных слов различны: при .Неравенство Макмиллана
Теорема: |
Неравенство Крафта-Макмиллана выполняется не только для любого префиксного кода, но и вообще для любого однозначного кода. |
Примечание: Именно это доказал Макмиллан, Крафт доказал неравенство для префиксных кодов.
Доказательство
Есть разные способы решить эту задачу, но будет приведено простое и красивое, хотя и несколько загадочное, решение.
Пусть имеется однозначный код с кодовыми словами . Необходимо доказать, что их длины удовлетворяют Неравенству Крафта-Макмиллана.
Вместо нулей и единиц будем использовать
и (из чего составлять коды разницы нет). Запишем формально сумму всех кодовых слов как алгебраическое выражение(многочлен от
и , в котором одночлены записаны как произведения переменных и , без возведения в степень). Теперь (ещё боле странное на первый взгляд действие) возведём это в степень (произвольное натуральное число) и раскроем скобки, сохраняя порядок переменных(не собирая вместе одинаковые переменные) в одночленах:Например, для кода со словами
(которые теперь записываются как ) и для получаемВ этом примере все одночлены в правой части различны (если не переставлять переменные), и это не случайно: так будет для любого однозначного кода. В самом деле, по определению однозначности никакое слово не может быть получено двумя способами при соединении кодовых слов.
Теперь подставим
в наше неравенство(если оно верно для букв, то оно верно и для любых их числовых значений). Слева получится(в скобке как раза выражение из неравенства Крафта-Макмиллана). Правую часть мы оценим сверху, сгруппировав слова пол длинам: имеется не более
слагаемых длины , каждое из которых равно , и потому слагаемые данной длины в сумме не превосходят единицы, а правая часть не превосходит максимальной длины слагаемых, то есть . Итак, получаем, чтои это верно при любом
. Если основание степени в левой степени больше единицы, то при больших это неравенство нарушится (показательная функция растет быстрее линейной). Поэтому, для однозначного кода выполняется неравенство Крафта-Макмиллана. Что и требовалось доказать.Ссылки
Литература
А. Шень "Программирование: теоремы и задачи" (Издание четвёртое, Москва, Издательство МЦНМО, 2011)