
- •Кодирование информации
- •Основные понятия
- •Основные понятия
- •Основные понятия
- •Основные понятия
- •Основные понятия
- •Основные понятия
- •Разделимые коды
- •Префиксные коды
- •Кодовое дерево
- •Кодовое дерево
- •Неравенство Крафта
- •Неравенство Мак-Миллана
- •Средняя длина кода
- •Теорема кодирования источников I
- •Теорема кодирования источников I
- •Теорема кодирования источников I
- •Теорема кодирования источников II
- •Теорема кодирования источников II
- •Теорема кодирования источников II
- •Теорема кодирования источников II
- •Избыточность кода
- •Задача оптимального кодирования
- •Метод Фано
- •Метод Фано
- •Метод Шеннона
- •Метод Хаффмена
- •Избыточность кода
- •Метод Хаффмена
- •Блочное кодирование

Теорема кодирования источников II
Для любого сколь угодно малого числа ε, существует метод кодирования блоков, содержащих L > 1 / ε символов, при котором для средней длины кодового слова на символ выполняется неравенство
n logHD
Избыточность кода
D 2 |
|
|
n H |
1 |
H |
n |
|
n |
Задача оптимального кодирования
A {a1,...,aN } P {p1,..., pN }
N
n ni pi
i 1
n min
D 2
N
2 ni 1
i 1
Метод Фано
Упорядоченный в порядке убывания вероятностей список букв делится на две последовательные части так, чтобы суммы вероятностей входящих в них букв как можно меньше отличались друг от друга. Буквам из первой части приписывается символ 0, а буквам из второй части – символ 1. Далее точно также поступают с каждой из полученных частей, если она содержит, по крайней мере, две буквы. Процесс продолжается до тех пор, пока весь список не разобьется на части, содержащие по одной букве. Каждой букве ставится в соответствие последовательность символов, приписанных в результате этого процесса данной букве. Легко видеть, что полученный код является префиксным.

Метод Фано
a1 |
0.20 |
0 |
0 |
|
|
00 |
a2 |
0.20 |
|
|
1 |
0 |
010 |
a3 |
0.19 |
|
|
|
1 |
011 |
a4 |
0.12 |
1 |
|
0 |
0 |
100 |
a5 |
0.11 |
|
|
|
1 |
101 |
a6 |
0.09 |
|
|
1 |
0 |
110 |
a7 |
0.09 |
|
N |
|
1 |
111 |
|
|
|
|
|
|
|
|
|
n pini |
2.8 |
|
|
i 1
Метод Шеннона
Метод Шеннона состоит в том, что букве ai, имеющей вероятность pi > 0, ставится в соответствие последовательность из
ni = ]log(1/pi)[ первых после дробной точки цифр разложения числа qi = p1 + … + pi–1 в бесконечную дробь.
На основе полученного префиксного кода строится усеченный префиксный код, который и является результатом кодирования по методу Шеннона.

ai a1 a2 a3 a4 a5 a6 a7
Метод Шеннона
ni |
qi |
Код ai |
Усеченный код ai |
]2.321…[ = 3 |
0 |
000 |
000 |
]2.321…[ = 3 |
0.2 |
001 |
001 |
]2.395…[ = 3 |
0.4 |
011 |
01 |
]3.058…[ = 4 |
0.59 |
1001 |
100 |
]3.183…[ = 4 |
0.71 |
1011 |
101 |
]3.472…[ = 4 |
0.82 |
1101 |
110 |
]3.472…[ = 4 |
0.91 |
1110 |
111 |
|
N |
|
|
|
n pi ni |
2.81 |
|
i 1
Метод Хаффмена
1.Упорядочение: буквы располагаются в порядке убывания их вероятностей.
2.Редукция: две буквы с наименьшими вероятностями объединяются в одну с суммарной вероятностью; список букв переупорядочивается в соответствии с шагом 1; процесс продолжается до тех пор, пока все буквы не будут объединены в одну. При этом можно добиться выравнивания длин кодовых слов с помощью следующей стратегии: если несколько букв имеют одинаковые вероятности, то объединяют те две из них, которые до этого имели наименьшее число объединений (правда на среднюю длину кода это не повлияет).
3.Кодирование: начиная с последнего объединения, последовательно приписываются одной компоненте составной буквы символ 0, а второй – символ 1; процесс продолжается до тех пор, пока все исходные буквы не будут закодированы.
Избыточность кода
|
|
N |
|
|
1 |
|
|
|
|
H (X ) pi log |
2.73 |
||||||||
|
|||||||||
|
|
i 1 |
|
|
pi |
|
|||
Код Фано: |
1 |
H |
1 |
2.73 |
0.025 |
||||
n |
2.8 |
|
|||||||
|
|
|
|
|
|||||
Код Шеннона: |
1 |
H |
1 |
2.73 |
|
0.028 |
|||
|
|
n |
|
2.81 |
|
||||
Код Хаффмена: |
1 |
H |
1 |
2.73 |
0.018 |
||||
|
|
n |
|
2.78 |
|
Метод Хаффмена
1.Алфавит A = {a1, a2, a3, a4, a5, a6, a7},
P = {0.2, 0.2, 0.19, 0.12, 0.11, 0.09, 0.09}.
2.Объединим буквы a6 и a7 в одну букву a1 с вероятностью 0.18 и переупорядочим список: A1 = {a1, a2, a3, a1, a4, a5},
P1 = {0.2, 0.2, 0.19, 0.18, 0.12, 0.11}.
3.Повторим шаг 2 до тех пор, пока не останется одна буква в списке:
P2 = {0.23, 0.2, 0.2, 0.19, 0.18}, A2 = {a2, a1, a2, a3, a1};
P3 |
= {0.37, 0.23, 0.2, 0.2}, |
A3 |
= {a3, a2, a1, a2}; |
|
P4 |
= {0.4, 0.37, 0.23}, |
A4 |
= {a4, a3, a2}; |
|
P5 |
= {0.6, 0.4}, |
A5 = {a5, a4}; |
||
P6 |
= {1}, A6 = {a6}. |
|
|
4.Присвоим двоичные коды символам:
a6: a5 = 0, a4 = 1; a5: a3 = 00, a2 = 01; a4: a1 = 10, a2 = 11;
a3: a3 = 000, a1 = 001; a2: a4 = 010, a5 = 011; a1: a6 = 0010, a7 = 0011.
a1 = 10, a2 = 11, a3 = 000, a4 = 010, a5 = 011, a6 = 0010, a7 = 0011.
N
n pi ni 2.78
i 1