Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
96
Добавлен:
27.03.2015
Размер:
435.03 Кб
Скачать
C(Σ, α) =

2005 г.

Павлов И.С.

Глава V. Теория кодирования.

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

Возникают следующие задачи:

1)Обеспечение надежности информации, т.е. α = α’.

2)Сжатие информации в целях экономии транспортных ресурсов.

Вданной главе рассмотрим подробно решение второй задачи.

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

Кодирование производится с помощью словарной функции f: A* B*,

где А – алфавит источника, В – алфавит канала, B* – множество слов, составленных из букв алфавита В.

a

v

1

 

1

: M

 

M – схема кодирования, где ai A, vi B*, i = 1, 2, …, k.

 

vk

ak

Слово ai1ai2ain кодируется последовательностью vi1vi2vin.

Определение 5.1. Набор V={v1, …, vk} называется кодом, а соответствие f между А и В –

кодированием. Каждый элемент кода называется словом кода или элементарным кодом. vi – длина элементарного кода, т.е. количество букв в нем.

Замечание. В принципе, кодировать элементарными кодами vi можно не только отдельные буквы ai A, но и целые слова α A*, однако второй вариант в данном курсе рассматривать не будем.

Примеры: Пусть A= {a, b, c, d}, B = {0, 1}. Рассмотрим 2 схемы кодирования:

 

a 00

 

a 0

 

 

 

 

Σ1

b 01

Σ2

b 10

:

:

 

c 10

 

c 110

 

 

 

 

 

d 11

 

d 111

Σ1 – схема равномерного кодирования (т.к. все элементарные коды имеют одинаковую длину), Σ2 – схема неравномерного кодирования.

Для сжатия информации желательно, чтобы длина полученного после кодирования слова была как можно меньше.

Определение 5.2. Пусть существует схема кодирования Σ. Отношение длины кода f(α) к

длине самого слова α называется стоимостью кодирования слова α в схеме Σ, то есть

f (α)

α .

В рассмотренном примере стоимость кодирования равна 2 независимо от слова α: С(Σ1, α) = 2, в то время как С(Σ2, α) зависит от α

Пусть в слове α буква a1 встречается n1 раз, a2 n2 раз, …, ak nk раз, тогда длина

слова α равна |α| = n1 + … + nk = n, а |f(α)| = n1|v1| + … + nk|vk|, так как ai vi и встречается в α ni раз. В этом случае C(Σ, α) = nn1 | v1 | +K+ nnk | vk | .

Определение 5.3. Величина pi (α) = nni показывает, какую часть слова α занимает буква ai.

Она называется частотой вхождения буквы ai в слово α.

k

+K+nk

 

Из определения 5.3. следует, что pi (α)=

n1

=1 для любого слова α.

 

n

i=1

 

Используя понятие частоты, можно дать другое определение для стоимости кодирования:

k

Определение 5.3a. C(Σ, α) = pi (α)vi .

i=1

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

ие равны, соответственно, 0,09 и 0,077. В случае больших сообщений можно использовать типичные частоты для данного языка. При этом стоимость кодирования будет зави-

сеть не от слова α, а от набора частот P=(p1, p2, …, pk).

k

Определение 5.3б. C(Σ, P) = pi vi .

i=1

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

Пример: Рассмотрим схемы Σ1 и Σ2 со страницы 48. Пусть сначала P1 = ( 14 ; 14 ; 14 ; 14 ).

С(Σ1, P1) = 2 для любых слов и частот,

С(Σ2, P1) = ¼ (1 + 2 + 3 + 3) = 2¼

Вывод. Для набора частот P1 схема Σ1 лучше. Пусть теперь P2 = ( 12 ; 14 ; 18 ; 18 ).

С(Σ1, P1) = 2, С(Σ2, P2) = ½ 1 + ¼ 2 + 18 (3 + 3) = 1¾.

Вывод. Для набора частот P2 схема Σ2 лучше.

Рассмотрим еще одну схему кодирования:

a 0

Σ : b 10

3 c 01d 11

Если при кодировании схемой Σ3 образуется слово 0110, то его можно декодировать неоднозначно: ada или cb. Такие схемы исключим из рассмотрения.

Нарушение однозначности означает, что равенство vi1vin = vj1vjm может выполняться даже при ai1ain aj1ajm.

Определение 5.4. Код V={v1, …, vk} называется свободным (или разделимым), если ра-

венство vi1vin = vj1vjm выполняется тогда и только тогда, когда n=m, i1 = j1, …, in=jm.

Иными словами, свободным (или разделимым) называется код, который декодируется однозначно. Соответственно, код, допускающий неоднозначное декодирование, на-

зывается несвободным (или неразделимым). 49

Рассмотрим еще один вид кодов – префиксные коды.

Определение 5.5. Префиксом будем называть всякое начало слова. Код называется префиксным, если ни одно из его слов не является началом другого слова этого кода.

Пример. Непрефиксный код: V = {01, 001, 110, 0100}

Первое слово является началом последнего слова, значит – такой код не префиксный.

Графическое представление кода

Если B={0, 1}, то код можно задать деревом. Слова кода при этом будут соответствовать вершинам дерева в зависимости от маршрута движения по ребрам дерева, начиная от корня: левому ребру приписан 0, правому – 1.

Пример. Является ли код V1={00, 001, 100, 11}префиксным? Если нет, постройте префиксный код с тем же набором длин кодовых слов.

Решение: Изобразим данный код графически (см. рисунок).

Вершины 00 и 001 смежные. Значит, этот код непрефиксный, но его можно преобразовать в префиксный с тем же набором длин кодовых слов, если перенести один из вышеназванных элементарных кодов в другую вершину того же яруса:

V’1 ={00, 010, 100, 11} – префиксный код.

Свойство префиксных кодов. Всякий префиксный код свободен.

Доказательство (методом от противного). Пусть код V={v1, …, vk} – префиксный. Допустим, что он несвободный. В этому случае равенство vi1 vin = vj1 vjm выполняется при (i1, …, in)(j1, …, jm), причем таких равенств может быть много. Выберем такое из них, для которого длина слова U= vi1 vin = vj1 vjm наименьшая. Докажем методом от противного, что i1j1. Предположим, что i1 = j1. Тогда, отбросив vi1, получим: vi2 vin = vj2 vjm – противоречие с тем, что U = min . Следовательно, i1j1. Рассмотрим полученное гра-

фически:

Отсюда получаем, что либо vj1 – префикс vi1 (см. рисунок), либо наоборот, vi1 – префикс vj1. Но код префиксный по условию, следовательно, такого быть не может. Таким образом, наше предположение о том, что код V несвободный, неверно. Значит, код V свободный.

Свойство свободных кодов. Свободный код может быть непрефиксным.

Пример. Код V = {1, 10} – не является префиксным по определению, но в то же время он не допускает неоднозначного декодирования, т.е. он свободный.

Все коды

Свободные Не свободные

Префиксные Не префиксные

50

Пусть в алфавите канала q букв: |B|=q. Рассмотрим код V={v1, …, vk}, vi B*. Множество {v1 , v2 ,..., vk }будем называть спектром кода. Для краткости обозначим vi = li . Используем эти обозначения для формулировки теоремы:

Прямая теорема о спектре свободного кода. Спектр любого свободного кода удовле-

k

1

 

творяет неравенству Макмиллана:

 

1.

l

i=1 q i

 

Пример: V={1, 10, 01} – свободный. k=3, l1=1, l2=l3=2; B={0, 1} q=2. Тогда получим:

1 + 1 2 =1. Следовательно, неравенство Макмиллана выполняется. 21 22

Введем дополнительные обозначения:

1)Vn = {α | α=α1α2αn, где αi V i=1÷n} – множество всех слов, представимых в виде произведения α1α2αn. Например, если V={1, 10}, то V2={11, 110, 101, 1010}.

2) Пусть α

слово

длины |α|.

Введем величину ω(α)=

1

 

 

 

. Тогда

 

q

 

α

 

 

 

 

 

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ω(V )ω(α)=

1

 

- левая часть неравенства Макмиллана. В предыдущем

l

α V

 

i=1 q i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

примере ω(α1 )=

 

1

, ω(α2 )=ω(α3 )=

1

 

=

1

, ω(V )=1.

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

22

4

 

 

 

 

 

 

 

 

 

 

 

 

 

Лемма. Если множество V состоит из слов длины, не превосходящей L, то ω(V)≤L.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L

 

Доказательство: V=V1 V2 … VL, где Vi – множество слов длины i. ω(V )= ω(Vi )=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=1

 

 

 

L

 

 

 

 

 

L

1

 

L | V |

 

[по определению ω(Vi)] = ∑ ∑ω(α)= [по определению ω(α)] = ∑ ∑

 

=

 

 

 

 

i

.

qi

 

qi

 

 

i=1α V

 

 

 

 

 

i=1α V

 

i=1

 

 

 

 

 

 

i

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

Здесь Vi – число слов из i букв. i-ю букву в слове можно выбрать q способами. Следовательно, |Vi| ≤ qi и, значит, ω(V)≤L.

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

 

 

 

 

 

 

 

 

 

 

 

1

 

n

 

n N (даже сколь угодно большого) (ω(V))n = [по определению ω(V)]=

 

 

= [из ал-

 

 

α

 

 

 

 

 

 

 

 

 

 

 

α V q

 

 

 

 

 

k

 

k

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

гебры] = K

 

= K

 

 

 

 

 

 

 

 

l

+K+l

 

 

 

 

 

 

 

 

 

i1=1 in =1 q i1

in

 

 

 

 

 

 

 

 

li1 + … + lin

= |vi1| + … + |vin| = | vi Kvi

| - для любого слова, которое раскладывается в

 

 

 

 

 

 

 

 

14243n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

α V n

 

 

 

 

 

 

 

 

произведение слов кода V.

 

 

 

 

 

 

 

 

... =

 

1

 

= [по определению] = ω(Vn)≤ [по лемме и т.к. код V - свободный] ≤ nL.

 

 

α

 

α V n q

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Следовательно, мы получили: (ω(V))nnL, т.е. ω(V )n nL . Переходя к пределу при n→∞, получим: ω(V)≤1, то есть неравенство Макмиллана выполняется.

51

Замечание. Если код несвободный, то он может удовлетворять неравенству Макмиллана.

Например, V={0, 10, 00}.

Обратная теорема о спектре свободного кода.

Если набор натуральных чисел ~l = (l1 , K, lk ) удовлетворяет неравенству Макмиллана

k

1

 

~

 

 

1, то существует префиксный код со спектром

l .

l

 

i =1 q

i

 

 

Доказательство (методом математической индукции): Пусть l1 l2 ≤ … ≤ lp (1≤рk). Индукция по р.

1шаг. р=1 l1 = |v1| Код V1={v1} – префиксный.

2шаг. Пусть l1 = |v1|, …, lp-1 = |vp-1|. Допустим, что код Vp-1 = {v1, …, vp-1} – префиксный. Докажем, что существует такое слово vp с длиной |vp| = lp, что код Vp = {v1, …, vp} будет

префиксным для любых p от 1 до k. Для этого рассмотрим все слова длины lp. Их количество равно Blp = qlp . Чтобы код был префиксным, исключим все слова, которые нельзя

добавить в код Vp-1 (иначе он станет непрефиксным!), то есть надо исключить слова с префиксами v1, …, vp-1. Оставшиеся слова – это те, которые можно добавить в код Vp-1. Посчитаем, сколько слов выбросим.

Если к слову длины lp-l1 добавить префикс v1, то код Vр будет непрефиксным. Поэтому выбросим все слова длины lp-l1. Их

количество qlp −l1 . По аналогичной причине необходимо выбросить все слова длины lp-l2. Их количество ql p −l2 . И т.д. Наконец, выбросим все слова

длины

lp-lр-1.

Их

количество

qlp −lp1 .

Всего

выброшено

слов:

ql p −l1 + ql p −l2

+ K+ ql p −l p 1 . Докажем,

что

останется

хотя

бы

одно

слово:

qlp (ql p −l1 + K+ qlp −l p 1 )1.

 

 

 

 

 

 

 

 

 

 

 

По

неравенству

Макмиллана

1

+K+

1

 

1.

Так

как 1≤рk,

то тем

более

 

 

 

 

 

 

 

 

 

 

 

ql1

 

qlk

 

 

 

 

 

 

1

+K+

1

 

1. Умножив обе части на qlp , получим qlp −l1 + K+ ql p −l p 1 +1 ql p ,

 

 

qlp

 

ql1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

т.е. существует хотя бы 1 слово vp, которое после добавления к коду Vp-1 оставляет его префиксным, что и требовалось доказать.

Пример: (1, 2, 4, 4)

удовлетворяет неравенству Макмиллана. Пусть B={a, b} q=2, тогда

|| || || ||

 

l1 l2 l3 l4

можно подобрать префиксный код v1=a, v2 = ba, v3 = bbaa, v4 = bbab. Неравенству Макмил-

лана он, очевидно, удовлетворяет, так как 211 + 212 + 214 + 214 = 78 <1.

5.2. Оптимальное кодирование

Определение 5.6. Оптимальным кодом для заданного набора частот P=(p1, …, pk) будем

k

называть код V={v1, …, vk} с наименьшей стоимостью кодирования pi vi .

i=1

52

Задача I. Для набора частот P=(p1, …, pk) найти свободный код V={v1, …, vk} такой, чтобы

k

стоимость кодирования pi vi была наименьшей.

i=1

Задача II. Для набора частот P=(p1, …, pk) найти префиксный код V={v1, …, vk} такой, что-

k

бы стоимость кодирования pi vi была наименьшей.

i=1

Доказательство эквивалентности задач I и II (методом от противного):

Эти задачи не эквивалентны, если найдется свободный код V0, не являющийся

префиксным, такой, что С(V0, P)=min (лучше любого префиксного). Тогда

(*),

~0

 

0

0

 

С(V0, P) < C(V1, P)

 

 

 

 

где V1 – префиксный код,

l

= (l1

, K, lk ) - спектр кода V0. По прямой теореме о спектре

k

 

 

 

 

 

 

 

свободного кода

1

1. Но тогда по обратной теореме о спектре свободного кода су-

l0

i=1 q i

 

 

со спектром ~l0 , т.е. lon = l0

 

 

ществует префиксный код

V n

. Значит, C(V n , P) = C(V , P) .

 

 

 

o

 

 

i

i

o

0

 

 

 

 

 

 

 

 

||

||

 

 

 

 

 

 

 

 

k

k

 

 

 

 

 

 

 

 

piloni

piloi

 

 

 

 

 

 

 

 

i =1

i =1

Получили противоречие с неравенством (*). Итак, доказали, что оптимальный код следует искать среди префиксных.

Свойства оптимальных префиксных кодов

Лемма 1. Пусть V={v1, …, vk} – оптимальный префиксный код, которому соответствует набор частот р1 р2 ≥ … ≥ рk. Тогда |v1| ≤ |v2| ≤ … ≤ |vk|.

Доказательство (от противного). Предположим, что i<j, но |vi|>|vj|.

a1 v1

M

ai vi

Рассмотрим 2 схемы кодирования : M

a j v jM

ak vk

a

 

v

 

 

1

1

 

M

 

 

 

 

ai

vi

 

 

 

 

 

.

и ∑′: M

 

 

 

a

j

v

j

 

 

 

M

 

 

 

 

 

 

 

vk

ak

Вычислим стоимости кодирования этими схемами:

k

k

C() = pm | vm | ,

C(∑′) = pm | vm | + pi | v j | +p j | vi |.

m=1

m=1

(mi, mj).

Составим разность:

 

 

 

 

 

 

 

 

C() C() = pi | v j | +p j | vi | pi | vi | p j | v j |= pi (| v j | | vi |)p j (| v j | | vi |)=

= ( pi p j

)(

 

v j

vi

 

)

C(Σ‘)≤C(Σ) Σ‘ – оптимальная схема, но по условию Σ опти-

 

 

14243

 

 

14243

 

 

 

 

 

 

 

0

 

 

 

0

 

мальная.

 

 

Значит,

сделанное вначале предположение неверно. Следовательно,

|v1|≤|v2|≤…≤|vk|.

53

Лемма 2. Пусть в оптимальном префиксном коде V={v1, …, vk} наибольшую длину имеет слово α. Тогда в этом коде существует слово β, отличающееся от α лишь последней буквой.

 

 

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

a

 

v

 

a

 

v

 

1

 

1

 

1

 

1

 

...

 

 

 

...

 

 

 

 

 

 

 

 

 

 

 

 

 

: ...

 

 

 

': ...

 

 

 

a

k

1

v

k 1

a

k

1

v

k 1

 

 

 

 

 

 

vk =α = γ0

 

 

vk = γ

ak

ak

При переходе от Σ к Σ’ уменьшилась длина последнего слова. Значит, С(Σ')<C(Σ), но по условию V – оптимальный префиксный код, т.е. С(Σ)=min. Следовательно, код V’ в схеме

префиксный

64748

Σ’ непрефиксный: V '={v1, K, vk 1, γ}. Получается, что началом γ является или v1, или v2,

442443

не префиксный

или … или vk-1. Но этого быть не может, иначе одно из vi ( i =1 ÷(k 1) ) является префиксом α, и тогда код V непрефиксный. Следовательно, vi=γδ, где i =1 ÷(k 1) . Причем δ≠0,

так как γ0 V, поэтому δ=1 и vi=γ1, т.е. vi отличается от vk лишь последней буквой, что и требовалось доказать.

Теорема редукции

 

 

 

 

 

Пусть

А={a1,

…, ak} – алфавит источника,

B={0,

1} – алфавит канала,

a

 

v

 

 

 

 

 

 

 

1

 

1

 

 

 

 

 

 

 

...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

– схема кодирования.

 

 

 

 

 

: ak 2 vk 2

 

 

 

 

 

a

k 1

v

k 1

=α0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=α1

 

 

 

 

 

ak vk

 

 

 

 

 

Коду V={v1, …, vk} соответствует набор частот Р = (p1, …, pk): р1р2≥ … ≥рk.

Пусть еще A’={a1, …, ak-2, bk-1) – новый алфавит источника.

 

 

 

 

 

 

 

a

v'

= v

 

 

 

 

 

 

1

 

1

 

1

 

 

 

 

 

 

...

 

 

 

 

– новая схема коди-

P’=(p1, …, pk-2, pk-1+pk) – новый набор частот, ':

 

 

 

 

 

 

 

 

 

ak 2

v'k 2 = vk 2

 

 

 

 

 

b

1

v'

k 1

=α

 

 

 

 

 

k

 

 

 

рования.

Тогда если схема Σ’ – оптимальная для набора частот Р’, то схема Σ – оптимальная для Р.

Доказательство:

1) Рассмотрим стоимости кодирования схемами Σ и Σ’:

k

k 2

 

 

 

 

 

k2

 

+(pk 1 + pk )(

 

 

 

1).

C(Σ, P) = pi

 

vi

 

, C(Σ', P') = pi

 

vi

 

+ p'k 1

 

v'k1

 

= pi

 

vi

 

 

vk

 

 

 

 

 

 

 

 

 

 

 

i=1

 

 

 

 

i=1

 

 

 

 

 

 

 

i=1

 

 

 

 

 

 

 

 

Составим их разность:

C(, P) C(', P') = pk1 | vk | +pk | vk | (pk 1 + pk )(| vk | 1)=

= pk 1 + pk > 0 . Следовательно, эта разность зависит лишь от частот (от кода не зависит!).

54

2) От противного. Предположим, что схема Σ не является оптимальной, тогда существует схема Σ1: С(Σ1, P)<С(Σ, P). Строим для Σ1 схему Σ1. По доказанному в шаге 1

C(1, P) C('1 , P') = pk1 + pk . Следовательно, С(Σ, P)–С(Σ’, P’)=С(Σ1, P)–С(Σ1, P’).

Значит, С(Σ, P)–С(Σ1, P)=С(Σ’, P’)–С(Σ1, P’). Поскольку левая часть последнего равенства положительна (Σ1 оптимальна для P), то и правая часть этого равенства положительна, что означает: С(Σ1, P’)<С(Σ’, P’). Значит, схема Σ’ не является оптимальной, что противоречит условию. Таким образом, схема Σ оптимальна для набора частот P, что и требовалось доказать.

Алгоритм построения оптимального кода (Метод Хаффмена)

Пример: Построить оптимальный код для заданного набора частот P = {0,4; 0,2; 0,12; 0,1; 0,1; 0,05; 0, 03} и алфавита источника А = {a1, …, a7}.

Решение: Построим оптимальный код методом Хаффмена, который основан на свойствах оптимальных кодов и теореме редукции.

Прямой ход. Припишем 1 и 0 тем двум буквам алфавита источника, которые используются в сообщении реже других (1 будет соответствовать самой маленькой частоте), и сложим их частоты.

a1

0,4

 

a1

0,4

 

a1

0,4

 

a1

0,4

 

a1

0,4

0

a1

0,4

a2

0,2

 

a2

0,2

 

a2

0,2

 

a2

0,2

0→ →

b4

0,38

 

 

 

 

0

 

 

a3

0,12

 

a3

0,12

 

a3

0,12

 

 

 

 

1

b5

0,6

 

 

b3

0,22

b3

0,22

a4

0,1

 

a4

0,1

 

a4

0,1

1

 

 

 

0

 

 

 

 

 

 

 

a5

0,1

 

a5

0,1

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

a6

0,05

 

 

1

b2

0,18

 

b2

0,18

1→ ↑

 

 

 

 

 

b1

0,08

 

 

 

 

 

 

a7

0,03

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обратный ход.

a1=1

b3=01 a3=011, a4=010

b5=0

b4=00 a2=000

b2=001 a5=0010

b1=0011 a6=00110, a7=00111

Получили код: {1, 000, 011, 010, 0010, 00110, 00111}. Как и ожидалось по теории, он префиксный.

55

Соседние файлы в папке Дискретка_лекции