Алфавитное кодирование

Автор работы: Пользователь скрыл имя, 09 Декабря 2011 в 08:53, курсовая работа

Краткое описание

Работа подавляющего числа современных систем связи основана на передаче сообщений в цифровом виде. Сбой при приеме любого элемента цифровых данных способен вызвать значительное искажение всего сообщения в целом, что, в свою очередь, может привести к полной потере информации, содержащейся в нем. В современных информационных системах важнейшей задачей является обеспечение информационной безопасности, связанной с методами криптографии и кодирования, теоретические основы которой заложил Шеннон в своих трудах.

Содержание работы

Введение 3
1. Теоретические основы задачи кодирования……………………………………………...6
1.1. Постановка задачи кодирования………….……………………………..….……………6
1.2. Первая теорема Шеннона…………………………………………………………….....10
1.3. Вторая теорема Шеннона……………………………………………………………….13
1.4. Помехоустойчивые коды…..........………………………………………….......…….…14
2. Алфавитное кодирование......................................................................................................17
2.1. Основные определения.....................................................................................................17
2.2. Проблема распознавания взаимной однозначности алфавитного кодирования.......18
2.3. Алгоритм построения префиксного кода по набору длин элементарных кодов........22
2.4. Алгоритмы экономного алфавитного кодирования......................................................23
2.4.1. Алгоритм Хаффмана...............................................................................................24
2.4.2. Алгоритм Фано........................................................................................................26
2.4.3. Алгоритм Шеннона.................................................................................................27
2.4.4. Энтропия и ее связь со стоимостью оптимального алфавитного
кодирования..................................................................................................................................28
2.4.5. Возможности сжатия при алфавитном кодировании, учитывающем
синтаксис языка сообщений........................................................................................................31
Заключение..................................................................................................................................34
Список литературы 35

Содержимое работы - 1 файл

Алфавитное кодирование.doc

— 473.00 Кб (Скачать файл)

Сопоставим коду V ориентированный граф G, вершинами которого являются элементы множества S. Вершины α и β соединяем ориентированным ребром (α, β), если существует элементарный код vj и последовательность элементарных кодов P = (v1,v2,…vm), такие, что vj=α vi1 vi2…vik β. При этом P может быть пустой, если α и β оба непустые.

    Ребру (αβ) припишем последовательность vi1 vi2…vik. Ребро (λ, λ) присутствует в графе тогда и только тогда, когда существует vj и последовательность P = vi1 vi2…vik (k2), такие, что vj = vi1 vi2…vik.

    Теорема 2.4. Алфавитный код V является взаимно-однозначным тогда и только тогда, когда в графе G отсутствуют ориентированные циклы, проходящие через вершину λ.

    Пример  2.3. Пусть B = (b1, b2, b3), V = {1,010,101}. Построим множества S1 и S:

S1 ={0,1,01,10}, S={0,1,01,10, λ}. Для этого выпишем все нетривиальные разложения элементарных кодов vi.

    Для v1 нет нетривиальных разложений.

    v2 = 010 = 0 v1 0 = 01 λ 0 = 0 λ 10

    v3 = 101 = λ v1 01 = 10 v1 λ = 1 λ 01 = 10 λ 1.

    Соответствующий коду граф изображен на рис.2.2.

     

 

     Рис.2.2. Граф для примера 2.3 

    Граф  содержит ориентированный цикл, проходящий через вершину λ, следовательно, код V не является взаимно-однозначным.

    По  графу нетрудно построить двоичную последовательность, допускающую две расшифровки. Для этого достаточно, начиная с вершины λ, приписать друг к другу двоичные последовательности, соответствующие вершинам и ребрам графа, вдоль найденного цикла.

Слово γ = 1010101, соответствующее циклу, допускает две расшифровки: b1 b2 b3 и b3 b2 b1.

    Пример  2.4. Пусть B = (b1 b2 b3 b4 b5), V = {1,01,100,0100,0000}. Построим множества S1 и S: S1 ={0,00,000,1}, S={0,00,000,1, λ}.

    Выпишем все нетривиальные разложения для  элементарных кодов.

v2 = 01 = 0 v1 λ = 0 λ 1

v3 = 100 = λ v1 00 = 1 λ 00

v4 = 0100 = 0 v1 00 = λ v2 00 = 0 v3 λ

v5 = 0000 = 0 λ 000 = 00 λ 00 = 000 λ 0.

    Соответствующий коду граф изображен на рис.2.3.

    Граф  не содержит ориентированный цикл, проходящий через вершину λ, следовательно, код V является взаимно-однозначным. 

     

     Рис.2.3. Граф для примера 2.4 

    2.3. Алгоритм построения префиксного кода по набору длин элементарных кодов 

    Пусть задан набор чисел l1,l2,…lm, удовлетворяющих неравенству Мак-Миллана:

. В силу теоремы 2.3 существует префиксный код с набором длин (l1,l2,…lm)

элементарных  кодов. Приведем алгоритм К. Шеннона построения префиксного кода по набору длин.

    Будем полагать l1 ≤ l ≤...≤ lm. Построим последовательность чисел q1, q2,..., qm по следующим правилам:

    q1 = 0,

    qi+1 = qi + 2-li (i = 1, 2, …, m-1)

    Очевидно, 0 ≤ qi < 1 и qi имеет единственное представление в виде двоичной дроби с li знаками после запятой:

     где или .

    Рассмотрим  код V = (v1,v2,...,vm), где

    Так как наборы длин упорядочены по неубыванию, при h > i выполняются неравенства

lh ≥ li и qh ≥ qi + 2-li. Поэтому элементарный код vh отличается от элементарного кода vi в li первых разрядах. Следовательно, построенный код является префиксным.

    Пример  2.5. Рассмотрим набор чисел L = (2,3,3,3,4,4,4). Так как

2-2 + 2-3 + 2-3 + 2-3 + 2-4 + 2-4 + 2-4 = <1, неравенство Мак-Миллана выполняется.

    Построим  последовательность чисел q1, q2, q3, q4, q5, q6, q7, записывая их в двоичной системе счисления.

     q1 = 0,00

     q2 = 0 + 2-2 = 0,010

     q3 = 0,01 + 2-3 = 0,01 + 0,001 = 0,011

     q4 = 0,011 + 2-3 = 0,011 + 0,001 = 0,100

     q5 = 0,1 + 2-3 = 0,1 + 0,001 = 0,1010

     q6 = 0,101 + 2-4 = 0,101 + 0,0001 = 0,1011

     q7 = 0,1011 + 2-4 = 0,1011 + 0,0001 = 0,1100

    Построим схему f алфавитного кодирования, выбирая в качестве элементарного кода

vпоследовательность из 0 и 1 длины li , образующую дробную часть числа qi :

      

    Нетрудно  убедиться в том, что построенный  код является префиксным. 

    2.4. Алгоритмы экономного алфавитного кодирования. 

    При построении экономных кодов используется дополнительная информация о вероятностях появления букв в сообщениях.

Пусть на буквах алфавита B = { b1 , b2 ,…, bm} задано распределение вероятностей

{ p1, p2 ,…, pm}, pi  ≥ 0, .

    Под стоимостью кодирования f понимается величина

      

(Здесь | vi | - длина элементарного кода буквы bi ). 

    Стоимость кодирования определяет число двоичных разрядов, которые  тратятся в среднем на кодирование одной буквы.

    Cf (P) - это средняя длина элементарного кода, которая показывает, во сколько раз

увеличивается средняя длина слова при кодировании  f.

    Пример 2.6. Пусть B = {b1 , b2 , b3 , b4}, P = {0,40;0,25;0,20;0,15}.

    Рассмотрим  две схемы алфавитного кодирования и определим для них стоимости

кодирования.

             

    Для  f1 стоимость кодирования Cf1(P) = 2, для f2 стоимость кодирования Сf2(P) = 1,95. Таким образом, стоимость кодирования может изменяться при переходе от одной схемы кодирования к другой.

    Положим C *(P) = inff Cf (P). Код V * со схемой f* такой, что Cf *( P) = C * (P), называется оптимальным для набора вероятностей P. Можно показать, что величина

C *(P) достигается при некоторой схеме f * и может быть определена как minf Cf (P). Оптимальные коды дают в среднем минимальное увеличение длин слов при соответствующем кодировании. В силу теоремы 2.3 при построении оптимальных кодов

можно ограничиться рассмотрением префиксных кодов.

    Рассмотрим алгоритмы построения оптимальных и близких к оптимальным кодов. 

    2.4.1. Алгоритм Хаффмана (1952 г.) 

    Алгоритм  Хаффмана строит оптимальный префиксный код. При рассмотрении алгоритмов кодирования наряду с элементарными кодами вершинам кодового дерева будем приписывать вероятности соответствующих букв. Алгоритм Хаффмана основан на следующих свойствах оптимальных кодов.

    Лемма 2.1. Если код V = (v1, v2,…,vm) - оптимальный для P = (p1, p2,…,pm), то |vi | ≤ | vj| при pi > pj.

    Из  леммы следует, что в оптимальном дереве вероятности букв, приписанные вершинам k-го яруса, не меньше вероятностей, приписанных вершинам (k+1)-го яруса.

    Лемма 2.2. Оптимальному префиксному коду соответствует насыщенное кодовое

дерево.

    Лемма 2.3. Две самые маленькие вероятности в оптимальном кодовом дереве находятся на нижнем ярусе. Перестановкой элементарных кодов нижнего яруса их можно поставить в вершины, для которых инцидентные им ребра выходят из одной вершины.

    Теорема 2.5 (теорема редукции). Если код с длинами (l1, l2,…, lm-1, lm ) является оптимальным для распределения вероятностей P = (p1, p2,…,pm-1, pm), то код с длинами

(l1, l2,…, lm-1, lm-1) также будет оптимальным для распределения вероятностей

P = (p1, p2,…,pm-1 + pm).

    Теорема редукции позволяет свести задачу построения оптимального кода мощности m к задаче построения оптимального кода мощности m-1. На ней основан алгоритм Хаффмана, который заключается в следующем. Пусть вероятности в распределении P = (p1, p2,…,pm) расположены в порядке не возрастания. На каждом шаге объединяются две буквы, имеющие наименьшие вероятности. Вместо этих двух букв вводится новая буква с вероятностью

p = pm-1 + pm. Вероятность p вставляется в оставшийся набор вероятностей так, чтобы в получившемся новом наборе вероятности остались расположенными в порядке не возрастания. Продолжаем процесс объединения вероятностей до тех пор, пока не останутся две буквы алфавита. Одной из них приписывается символ 0, другой – символ 1 (оптимальный код для двух букв при произвольном распределении вероятностей). Затем из оптимального кода для двух букв строится оптимальный код для трех букв, и т.д. Продолжая этот процесс, придем к искомому оптимальному коду для m букв.

Информация о работе Алфавитное кодирование