Код Шеннона — различия между версиями
Nikita (обсуждение | вклад) |
Nikita (обсуждение | вклад) м (→Определение) |
||
| Строка 9: | Строка 9: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
| − | Пусть <tex>A=\{a_{1},a_{2},\dots,a_{n}\}</tex> — алфавит из <tex>n</tex> различных символов с вероятностями <tex>P=\{p_{1},p_{2},\dots,p_{n}\}</tex>, <tex>b_{x}=\sum\limits_{i \in [1, x - 1]} | + | Пусть <tex>A=\{a_{1},a_{2},\dots,a_{n}\}</tex> — алфавит из <tex>n</tex> различных символов с вероятностями <tex>P=\{p_{1},p_{2},\dots,p_{n}\}</tex>, <tex>b_{x}=\sum\limits_{i \in [1, x - 1]}p_{i}</tex>. Тогда набор бинарных кодов <tex>C=\{c_{1},c_{2},\dots,c_{n}\}</tex>, такой, что: |
1. <tex>c_{i}</tex> не является префиксом для <tex>c_{j}</tex>, при <tex>i \ne j</tex> | 1. <tex>c_{i}</tex> не является префиксом для <tex>c_{j}</tex>, при <tex>i \ne j</tex> | ||
| Строка 17: | Строка 17: | ||
называется '''кодом Шеннона'''. | называется '''кодом Шеннона'''. | ||
}} | }} | ||
| + | |||
== Алгоритм построения бинарного кода Шеннона == | == Алгоритм построения бинарного кода Шеннона == | ||
Версия 15:23, 8 января 2015
Код Шеннона — алгоритм префиксного кодирования алфавита, предложенный Клодом Шенноном, в котором используется избыточность сообщения, заключённая в неоднородном распределении частот символов первичного алфавита, то есть заменяет коды более частых символов короткими последовательностями, а коды более редких символов — более длинными последовательностями.
Вход: — алфавит из различных символов с вероятностями .
Выход: — набор кодовых слов, соответствующий входным данным.
Содержание
Определение
| Определение: |
| Пусть — алфавит из различных символов с вероятностями , . Тогда набор бинарных кодов , такой, что:
1. не является префиксом для , при 2. представляет собой коэффициентов двоичного разложения числа называется кодом Шеннона. |
Алгоритм построения бинарного кода Шеннона
Пусть нам даны наборы и , тогда для нахождения кодовых слов необходимо:
- Отсортировать элементы алфавита по не возрастанию вероятности встречи символа.
- Элементу поставить в соответствие число , при этом .
- Представить каждое число в виде двоичной дроби.
- В качестве кодового слова для использовать первые коэффициентов представления . ( — наименьшее целое число, не меньшее )
Пример
Для примера возьмём алфавит и набор :
| Символ | a | b | c | d | e | f |
|---|---|---|---|---|---|---|
| 0,10 | 0,20 | 0,10 | 0,10 | 0,35 | 0,15 |
По алгоритму сортируем элементы алфавита по не возрастанию :
| Символ | e | b | f | a | c | d |
|---|---|---|---|---|---|---|
| 0,35 | 0,20 | 0,15 | 0,10 | 0,10 | 0,10 |
Каждому символу сопоставляем :
| Символ | e | b | f | a | c | d |
|---|---|---|---|---|---|---|
| 0,00 | 0,35 | 0,55 | 0,70 | 0,80 | 0,90 |
Переведём в двоичную систему счисления:
| Символ | e | b | f | a | c | d |
|---|---|---|---|---|---|---|
| 0,00000 | 0,01010 | 0,10001 | 0,10110 | 0,11001 | 0,11100 |
Посчитаем и запишем коды:
| Символ | e | b | f | a | c | d |
|---|---|---|---|---|---|---|
| 2 | 3 | 3 | 4 | 4 | 4 | |
| Код | 00 | 010 | 100 | 1011 | 1100 | 1110 |
| Утверждение: |
Код Шеннона является префиксным |
|
Для доказательства выбираем два произвольных кодовых слова с номерами и , . Кодовое слово заведомо короче, чем , поэтому достаточно доказать, что эти слова отличаются в одном из первых символов. Рассмотрим разность: = . Длина слова и его вероятность связаны соотношением . Поэтому . С учётом этого неравенства получаем, что . В двоичной записи числа в правой части мы имеем после запятой нулей и единицу в позиции с номером . Поэтому по меньшей мере в одном из разрядов слова и отличаются и, следовательно, не является префиксов для . Это верно для любой пары слов, так как и были выбраны произвольно. Значит, код является префиксным. |
См.также
Источники информации
- Ю. М. Штарьков, “Обобщенные коды Шеннона”, Пробл. передачи информ., 20:3 (1984), 3—16 — с. 4.
- Б. Д. Кудряшов Теория информации. С.—Пб.: Питер, 2009 — с. 36.