Основные понятия
Кодирование и декодирование
Шифрование и дешифровка являются частными случаями более общих понятий кодирования и декодирования.
Пусть X и Y — два произвольных множества. Будем называть пару отображений c:X→Y и d:Y→X кодированием и декодированием, если d(c(x))=x для всех x∈X.
Обычно, когда говорят о кодировании и декодировании, то считают множества X и Y не совсем произвольными: почти всегда эти множества — множества конечных последовательностей элементов каких-нибудь «алфавитов».
Поэтому далее мы будем считать, что X состоит из конечных последовательностей элементов множества A, которое в дальнейшем мы будем называть словом «алфавит». А вот Y мы будем считать множеством конечных последовательностей элементов двухэлементного множества {0,1}.
Посимвольное кодирование
Будем говорить, что c — посимвольное преобразование, если для любого n и любой последовательности x1x2…xn выполнено
c(x1x2…xn)=c(x1)c(x2)…c(xn)
Если вдобавок ещё и существует преобразование d такое, что d(c(x))=x для всех x∈X, то будем называть c посимвольным кодированием.
Есть хороший признак посимвольного кодирования, называемый префиксным свойством или условием Фано:
- для любых x1≠x2 последовательность c(x1) не является началом последовательности c(x2)
Посимвольное преобразование, обладающее префиксным свойством, является кодированием! Доказательство этого факта оставим читателю в качестве простого упражнения.