Неравенство Макмиллана — различия между версиями
(→Неравенство Макмиллана) |
(→Неравенство Макмиллана) |
||
| Строка 19: | Строка 19: | ||
Докажем теорему способом, приведенным в книге А. Шеня "Программирование: теоремы и задачи". | Докажем теорему способом, приведенным в книге А. Шеня "Программирование: теоремы и задачи". | ||
| − | Пусть имеется однозначный код с <tex>k</tex> кодовыми словами <tex>P_1 | + | Пусть имеется однозначный код с <tex>k</tex> кодовыми словами <tex>P_1, ..., P_k</tex>. Необходимо доказать, что их длины <tex>n_i=|P_i|</tex> удовлетворяют неравенству Макмиллана. |
| − | + | Рассмотрим любой однозначный код с <tex>k</tex> кодовыми словами <tex>P_1, ..., P_k</tex>. Для удобства при кодировании вместо нулей и единиц будем использовать <tex>a</tex> и <tex>b</tex> соответственно. | |
| − | + | Представим сумму всех слов (кодируемых через <tex>a</tex> и <tex>b</tex>) и возведем эту сумму в степень <tex>N</tex> (любое натуральное число): <tex>(P_1+P_2+...P_k)^N</tex>. Раскрывая скобки, сохраним порядок переменных и не будем собирать их вместе (то есть возводить их в степень). По определению однозначности никакое слово не может быть получено двумя способами при соединении кодовых слов, следовательно все слова должны получиться разными. | |
| − | <tex>=(a+ | + | Вот пример для однозначного кода со словами <tex>a,ab,bb</tex> и <tex>N=2</tex>: |
| + | <tex>(a+ab+bb)^2</tex><tex>=(a+ab+bb)\times{(a+ab+bb)}=aa+aab+abb+aba+abab+abbb+bba+bbab+bbbb.</tex> Все получившиеся слагаемые (слова) различны (соответствует определению однозначности). | ||
| − | + | Если неравенство верно для букв, то оно верно для любых числовых значений. Подставим <tex>a=b=\frac{1}{2}</tex> в неравенство. В левой части получится выражение из неравенства Макмиллана: <tex>(2^{-n_1}+2^{-n_2}+...+2^{-n_k})^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 \le N\times{\max(n_i)}</tex> верно для любого <tex>N</tex>. Так как показательная функция растет быстрее линейной, то при основании большем единицы неравенство нарушается. Поэтому, для однозначного кода выполняется неравенство Макмиллана. | |
}} | }} | ||
Версия 02:51, 13 января 2012
Необходимые определения
| Определение: |
| Пусть заданы два произвольных конечных множества, которые называются, соответственно, кодируемым алфавитом и кодирующим алфавитом. Их элементы называются символами, а строки (последовательности конечной длины) символов — словами. Длина слова — это число символов, из которого оно состоит. |
В качестве кодирующего алфавита часто рассматривается множество — так называемый двоичный или бинарный алфавит.
| Определение: |
| Кодом для алфавита называется функция , которая для каждого символа из указывает слово , кодирующее этот символ. |
| Определение: |
| Код называется однозначным, если никаким двум словам кодируемого алфавита не может быть сопоставлен один и тот же код. |
Неравенство Макмиллана
| Теорема: |
(где — длины кодовых слов) выполняется для любого однозначно декодируемого кода. |
| Доказательство: |
|
Докажем теорему способом, приведенным в книге А. Шеня "Программирование: теоремы и задачи". Пусть имеется однозначный код с кодовыми словами . Необходимо доказать, что их длины удовлетворяют неравенству Макмиллана. Рассмотрим любой однозначный код с кодовыми словами . Для удобства при кодировании вместо нулей и единиц будем использовать и соответственно. Представим сумму всех слов (кодируемых через и ) и возведем эту сумму в степень (любое натуральное число): . Раскрывая скобки, сохраним порядок переменных и не будем собирать их вместе (то есть возводить их в степень). По определению однозначности никакое слово не может быть получено двумя способами при соединении кодовых слов, следовательно все слова должны получиться разными. Вот пример для однозначного кода со словами и : Все получившиеся слагаемые (слова) различны (соответствует определению однозначности). Если неравенство верно для букв, то оно верно для любых числовых значений. Подставим в неравенство. В левой части получится выражение из неравенства Макмиллана: . Всего имеется не более слагаемых длины равных , следовательно слагаемые данной длины в сумме не превосходят единицы, а правая часть не превосходит максимальной длины слагаемых: . Получаем, что верно для любого . Так как показательная функция растет быстрее линейной, то при основании большем единицы неравенство нарушается. Поэтому, для однозначного кода выполняется неравенство Макмиллана. |
Ссылки
Литература
Шень А. Х. Программирование: теоремы и задачи. — М.: МЦНМО, 2011. С. 206 - 210. ISBN 978-5-94057-696-9