Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OTI Lections2011.doc
Скачиваний:
0
Добавлен:
09.01.2020
Размер:
1.74 Mб
Скачать

4.2.5.2Префиксные коды.

Определение. Слово α является подсловом слова β, если существуют слова ϒ и ϑ (возможно пустые) такие, что β=ϒαϑ.

В общем случае из неравенства Крафта не следует дешифруемость.

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

Теорема. Префиксный код дешифруем.

Доказательство: Пусть есть α и β – два слова: φ(α) = Bi1Bi2Bin, φ(β) = Bj1Bj2Bjn).

Покажем, что из равенства φ(α) = φ(β) следует равенство α = β.

Пусть Bi1Bi2Bin = Bj1Bj2Bjn

Поочередно слева направо сравниваем подслова слов α и β, используя знание функции ϕ, которая определяет наше побуквенное кодирование (эта функция позволяет находить Bi= φ(ai) среди подслов слов α и β. Сначала сравниваем Bi1 = Bj1 , затем переходим к Bi2 и Bj2 и т.д.

Если длины слов Bi1 и Bj1 одинаковы, то сами слова должны быть одинаковыми из того, что Bi1Bi2Bin = Bj1Bj2Bjn. Если длины слов разные, то одно из двух слов: Bi1 или Bj1 – начало другого, что противоречит определению префиксности.

Значит, α = β.

Теорема доказана.

Из теоремы сразу следует алгоритм декодирования префиксного кода.

Алгоритм декодирования. Берем первый символ слова φ(α) и ищем однобуквенное слово среди кодовых слов. Если находим такое слово, например, Bi= φ(ai), то декодируем слово Bi= φ(ai) в букву ai и продолжаем работать, начиная со следующего символа слова φ(α). Если не находим, то добавляем следующий символ и ищем среди кодовых слов уже двухбуквенное слово. И т.д.

В случае алфавитного кодирования можно ограничиться префиксными кодами, так как, в каком-то смысле, любой дешифруемый алфавитный (побуквенный) код можно свести к префиксному. А существование префиксного кода полностью определяется неравенством Крафта.

Теорема (о существовании префиксного кода). Префиксный код с длинами кодов l1ln существует тогда и только тогда, когда выполняется неравенство Крафта

.

Доказательство. Т.к. префиксный код дешифруем, то выполняется неравенство Крафта. С другой стороны, пусть выполняется неравенство Крафта. Покажем, что в этом случае существует префиксный код. Мы просто опишем алгоритм построения такого кода, т.е. построим отображение Bi= φ(ai).

Пусть . Пусть среди чисел l1ln имеется S1 единиц, S2 двоек, S3 троек и т.д. до Sl слов длины l. При этом некоторые из Si могут быть нулями. Упорядочим Bi= φ(ai) по возрастанию длины.

B 1 = |l1| = 1

B2 = |l2| = 1 S1 слов длины 1

B S1 = |lS1| = 1

B S1+1 = |l S1+1| = 2

S2 слов длины 2

Т огда левую часть неравенства Крафта можно представить в виде:

S1 S2 S3

Теперь пошагово строим наш префиксный код.

Первый шаг: Любые S1 букв в B можно использовать для кодирования слов длины. Это следует из того, что при выполнении неравенства Крафта справедливо соотношение: S1/q ≤ 1, из которого следует, что S1 ≤ q. Таким образом мы получили первую группу однобуквенных слов.

Второй шаг: Аналогично из неравенства Крафта получаем S1/q + S2/q ≤ 1 . Отсюда S1q + S2q2 , S2q2s1q. Поэтому можно взять S2 слов длины 2 в алфавите B так, что они не начинаются со слов первой группы. Таким образом мы получили вторую группу двухбуквенных слов.

Третий шаг: На этом шаге строим группу трехбуквенных слов так, чтобы они не начинались с ранее построенных слов. Такие трехбуквенные слова в нужном количестве существуют, так как вновь из неравенства Крафта следует, что S1/q + S2/q + S3 / q1. А это означает, что S3q3qS2q2S1.

Таким образом проходим все l шагов и в результате получаем дешифруемый префиксный код.

Теорема доказана.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]