
Свойства оптимальных префиксных кодов
Лемма 1. ПустьV= {V1, …,Vk} – оптимальный префиксный код[По обратной теореме о спектре свободного кода]Существует префиксный код. р1≥ р2≥ … ≥ рk– набор частот. Тогда |V1| ≤ |V2| ≤ … ≤ |Vp|.
Доказательство: (от противного)
Пусть i<j,
то |Vi|
> |Vj|.
Пусть,
.
,
.mi,mj.C(‘)
–C()
=pi|Vj|
+pi|Vi|
-pi|Vj|
-pj|Vj|
=pi(|Vj|
- |Vi|)
–pj(|Vj|
- |Vi|)
=
C(‘)
≤C()‘
– оптимальный код – противоречие с
условием.
Лемма 2. ПустьV= {V1, …,Vk} – оптимальный префиксный код. || =max. Тогда существуетpV, отличный отлишь первой буквой.
Доказательство: Рассмотрим схемы кодирования:
При переходе от к’ мы уменьшим
степень последнего слова С(')
<C(),
но по условиюV– оптимальный
код, значит С() =minКодV’
в схеме’ не
префиксный..
Следовательно, у- начало илиV1илиV2или … илиVk-1.
Но этого быть не может, иначе- тоже началоV1илиV2или … илиVk-1
и тогдаV– не префиксный.
СледовательноVi=(Vi{V1, …,Vk-1}).0, так как существует0V= 1Vi=1.
Теорема Редукции
А = {a1, …,ak}
– алфавит источника, Р = (p1,
…,pk)
– набор частот. р1≥ р2≥ …
≥ рk.V= {V1, …,Vk}
– оптимальный префиксный код. Система
кодирования:.A’ = {a1,
…,ak-2,bk-1)
– новый алфавит.P’ = Р
= (p1,
…, pk-2,
pk-1 +
pk).
- новая схема кодирования.
Если схема ’ – оптимальная для набора частотp’- оптимальная для р.
Доказательство: Рассмотрим стоимость
кодирования С(,P)
=,
С другой стороны С(’,P’) =
+p’k-1|V’k-1|
=
+ (pk-1+pk)(|Vk|
- 1). С(,P)
- С(’,P’)
=pk-1|Vk|
+pk|Vk|
- (pk-1+pk)(|Vk|
- 1) =pk-1+pk>
0.
Далее методо м от противного. Предположим,
что - не оптимальный,
тогда существует1:
С(1,P)
< С(,P).
Строим для1схему’1.
С(1,P)
- С(’1,P)
= [по доказанному в 1 части] =pk-1+pk.
С(,P)
- С(’,P’)
= С(1,P)
- С(’1,P’)С(’1,P’) < С(’,P’)’ – не оптимальнаяПротиворечие с
условием.
Алгоритм построения оптимального кода (Метод Хаффмена)
Пример: А = {a1, …,a7},P= {0,4; 0,2; 0,12; 0,1; 0,1; 0,05; 0, 03}
a1 |
0,4 |
|
a1 |
0,4 |
|
a1 |
0,4 |
|
a1 |
0,4 |
|
|
a1 |
0,4 |
|
a1 |
0,4 |
a2 |
0,2 |
a2 |
0,2 |
a2 |
0,2 |
a2 |
0,2 |
0 |
|
b4 |
0,38 |
0 |
b5 |
0,6 | |||
a3 |
0,12 |
a3 |
0,12 |
a3 |
0,12 |
0 |
b3 |
0,22 |
|
|
b3 |
0,22 |
1 | ||||
a4 |
0,1 |
a4 |
0,1 |
a4 |
0,1 |
1 |
| ||||||||||
a5 |
0,1 |
a5 |
0,1 |
0 |
b2 |
0,18 |
|
b2 |
0,18 |
1 |
|
|
|
|
|
| |
a6 |
0,05 |
0 |
b1 |
0,08 |
1 | ||||||||||||
a7 |
0,03 |
1 |
Полученный код должен быть префиксным.