Неравенство Макмиллана — различия между версиями
(→Неравенство Макмиллана) |
(→Неравенство Макмиллана) |
||
Строка 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