Спирина, М.С. Дискретная математика
0 1 2 3 4 5 6 7 8 9 Л ° [OOOO 0001 0010 ООП 0100 0101 0110 0111 1000 1001 Это двоично-десятичное кодирование, оно является взаимно-од нозначным и потому допускает декодирование. Однако схема а = ( 0 о 2 10 3 11 4 100 5 101 6 110 7 111 8 1000 9 ^ 1001 не является взаимно-однозначной. Например, кортеж из шести единиц 111111 может соответствовать как слову 333, так и 77, 111111, а также 137, 3311 или 7111 плюс любая перестановка. Кодирование с минимальной избыточностью. Оптимальным я в ляется кодирование, при котором сообщение имеет наименьшую из возможных длину. Но для выявления наилучшего из вариантов необходима дополнительная информация. Например, для сооб щений, представленных на естественном языке, такой дополни тельной информацией может быть распределение вероятности появления букв в некотором тексте. Тогда задача построения оп тимального кода приобретает точную математическую формули ровку и строгое решение. Пусть задана некоторая схема алфавитного кодирования о = а , Р« а л . Тогда любая схема а' = 0-1 К а„ К где кортеж (Pi'...P^) есть перестановка кортежа <(3t...|3Я), также будет задавать некое кодирование. В таком случае, если длины элементарных к о дов равны, то их перестановка в схеме не влияет на длину закоди рованного сообщения. В том случае, если длины элементарных кодов различны, то длина кода сообщения напрямую зависит и от того, какие элементарные коды каким буквам поставлены в соответ ствие, и от того, каков состав букв в сообщении. Поэтому для определения алгоритма назначения элементар ных кодов, дающих минимальную длину фиксированного сооб щения S при фиксированной схеме а , необходимо: отсортировать буквы в порядке убывания количества вхождений; отсортировать элементарные коды в порядке возрастания длины; поставить коды в соответствие буквам в установленном порядке. Назовем схему о префиксной, если элементарный код одной буквы не является префиксом кода другой буквы. Схема а называется разделимой, если любое слово, составлен ное из элементарных кодов, разлагается на элементарные коды единственным образом, т.е. VP = (Р,р2...р„), Р, е В 3! разбиение р = <Ь,1 ...Ь? ...Ь{ ...Ь?) = (b\b2...bk), где bj е В*, а Ь{ е В , причем b[ bfr Vbj е В* 3! а, е А* : aj - a~l(bj). Полученное слово можно разбить на к подслов длины л,: Ь{ = рь ..., Ь?' = Р„„ Ъ\ = р„1+1, ..., Ьк"> = Р„, 311
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==