
Дискретная_математика_1 семестр_1 курс / Дискретка_лекции / lections_theme_05
.pdf
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 |
Слово ai1ai2…ain кодируется последовательностью vi1vi2…vin.
Определение 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. Такие схемы исключим из рассмотрения.
Нарушение однозначности означает, что равенство vi1…vin = vj1…vjm может выполняться даже при ai1…ain ≠ aj1…ajm.
Определение 5.4. Код V={v1, …, vk} называется свободным (или разделимым), если ра-
венство vi1…vin = vj1…vjm выполняется тогда и только тогда, когда 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 наименьшая. Докажем методом от противного, что i1≠j1. Предположим, что i1 = j1. Тогда, отбросив vi1, получим: vi2 … vin = vj2 … vjm – противоречие с тем, что U = min . Следовательно, i1≠j1. Рассмотрим полученное гра-
фически:
Отсюда получаем, что либо 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))n≤nL, т.е. ω(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 −lp−1 . |
Всего |
выброшено |
слов: |
|||||||||||
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 |
(m≠i, m≠j).
Составим разность:
′ |
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
k−2 |
|
+(pk −1 + pk )( |
|
|
|
−1). |
||||||||
C(Σ, P) = ∑pi |
|
vi |
|
, C(Σ', P') = ∑pi |
|
vi |
|
+ p'k −1 |
|
v'k−1 |
|
= ∑pi |
|
vi |
|
|
vk |
|
|||
|
|
|
|
|
|
|
|
|
|
||||||||||||
i=1 |
|
|
|
|
i=1 |
|
|
|
|
|
|
|
i=1 |
|
|
|
|
|
|
|
|
Составим их разность: |
C(∑, P) −C(∑', P') = pk−1 | 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') = pk−1 + 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