Неравенство Макмиллана
Необходимые определения
Определение: |
Пусть заданы два произвольных конечных множества, которые называются, соответственно, кодируемым алфавитом и кодирующим алфавитом. Их элементы называются символами, а строки (последовательности конечной длины) символов — словами. Длина слова — это число символов, из которого оно состоит. |
В качестве кодирующего алфавита часто рассматривается множество
— так называемый двоичный или бинарный алфавит.
Определение: |
Кодом для алфавита | называется функция , которая для каждого символа из указывает слово , кодирующее этот символ.
Определение: |
Код называется однозначным, если никаким двум словам кодируемого алфавита не может быть сопоставлен один и тот же код. |
Неравенство Макмиллана
Теорема: |
(где — длины кодовых слов) выполняется для любого однозначно декодируемого кода. |
Доказательство: |
Докажем теорему способом, приведенным А. Шенем. Пусть имеется однозначный код с кодовыми словами . Необходимо доказать, что их длины удовлетворяют неравенству Крафта—Макмиллана.Так как нет разницы из чего составлять коды, то вместо нулей и единиц будем использовать и . Запишем формально сумму всех кодовых слов как алгебраическое выражение (многочлен от и , в котором одночлены записаны как произведения переменных и , без возведения в степень). Теперь (ещё более странное на первый взгляд действие) возведём это в степень (произвольное натуральное число) и раскроем скобки, сохраняя порядок переменных (не собирая вместе одинаковые переменные) в одночленах: сумма одночленов.Например, для кода со словами (которые теперь записываются как ) и для получаемДалее подставим Не случайно в этом примере все одночлены в правой части различны (если не переставлять переменные): так будет для любого однозначно декодируемого кода, ведь по определению однозначности никакое слово не может быть получено двумя способами при соединении кодовых слов. в наше неравенство (если оно верно для букв, то оно верно и для любых их числовых значений). Слева получится (выражение из неравенства Крафта—Макмиллана). Оценим правую часть сверху, сгруппировав слова по длинам: имеется не более слагаемых длины , каждое из которых равно , и потому слагаемые данной длины в сумме не превосходят единицы, а правая часть не превосходит максимальной длины слагаемых, то есть . Получаем, что и это верно при любом . Если основание степени в левой части больше единицы, то при больших это неравенство нарушится (показательная функция растет быстрее линейной). Поэтому, для однозначного кода выполняется неравенство Крафта—Макмиллана. |
Ссылки
Литература
Шень А. Х. Программирование: теоремы и задачи. — М.: МЦНМО, 2011. С. 206 - 210. ISBN 978-5-94057-696-9