Processing math: 100%

Основные понятия

Кодирование и декодирование

Шифрование и дешифровка являются частными случаями более общих понятий кодирования и декодирования.

Пусть X и Y — два произвольных множества. Будем называть пару отображений c:XY и d:YX кодированием и декодированием, если d(c(x))=x для всех xX.

Обычно, когда говорят о кодировании и декодировании, то считают множества X и Y не совсем произвольными: почти всегда эти множества — множества конечных последовательностей элементов каких-нибудь «алфавитов».

Поэтому далее мы будем считать, что X состоит из конечных последовательностей элементов множества A, которое в дальнейшем мы будем называть словом «алфавит». А вот Y мы будем считать множеством конечных последовательностей элементов двухэлементного множества {0,1}.

Посимвольное кодирование

Будем говорить, что cпосимвольное преобразование, если для любого n и любой последовательности x1x2xn выполнено

c(x1x2xn)=c(x1)c(x2)c(xn)

Если вдобавок ещё и существует преобразование d такое, что d(c(x))=x для всех xX, то будем называть c посимвольным кодированием.

Есть хороший признак посимвольного кодирования, называемый префиксным свойством или условием Фано:

  • для любых x1x2 последовательность c(x1) не является началом последовательности c(x2)

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