равномерное и неравномерное кодирование условие фано

Передача информации

Содержание урока

1.3.2. Равномерные и неравномерные коды. Условие Фано

1.3.2. Равномерные и неравномерные коды. Условие Фано

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фаноКодирование информации может быть произведено так, что каждый получаемый код имеет одну и ту же длину. Например, французский инженер и изобретатель Эмиль Бодо в 1870 году разработал для своего телеграфа особый код — код Бодо (рис. 1.11), в котором каждая буква, цифра или другой знак кодировался при помощи комбинации из пяти сигналов. Такая телеграфная система могла, например, передавать информацию по пяти параллельным электрическим линиям, когда тот или иной символ кодировался наличием или отсутствием электрического тока в той или иной из этих пяти линий.

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

Рис. 1.11

Очевидно, что каждому символу соответствует код одной и той же длины, а суммарный размер закодированной текстовой строки может быть вычислен умножением количества символов на длину одного кода. Такой код называют равномерным кодом, или кодом постоянной длины, а кодирование, соответственно, называют равномерным кодированием.

Равномерное кодирование реализовать достаточно просто. Но такой способ кодирования не всегда оптимален. Вспомним, что различные буквы и другие символы встречаются в тексте с разной частотой. Так, в текстах на русском языке буквы «А», «О», «И» встречаются гораздо чаще, чем, например буква «Ы» или «Ъ». При кодировании такого текста более выгодно назначать буквам коды различной длины в зависимости от частоты встречаемости этих букв.

Для «А», «О», «И» и других часто используемых букв можно использовать более короткие коды, а для редко используемых символов — коды большей длины. Такие коды называют неравномерными, или кодами переменной длины, а кодирование — неравномерным.

Примером неравномерного кода является азбука Морзе (рис. 1.12).

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

Рис. 1.12

В компьютере информация представлена в виде последовательностей нулей и единиц, поэтому в качестве кодов обычно используются последовательности именно этих цифр. Например, в азбуке Морзе можно заменить точки нулями, а тире — единицами. Тогда строка текста «КОД МОРЗЕ» может быть закодирована так — рис. 1.13.

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

Рис. 1.13

При этом возникает вопрос: как обеспечить однозначность декодирования такого кода — так, чтобы полученную при кодировании «сплошную» последовательность нулей и единиц можно было разделить на коды, соответствующие «правильным» буквам. Для обеспечения однозначности декодирования закодированного сообщения необходимо выбирать неравномерные коды такими, что при «разборе» закодированной последовательности слева направо (или справа налево) каждый раз можно было отделять от неё очередной код единственным способом.

1. Набор кодов, соответствующий условию Фано:

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

2. Набор кодов, не соответствующий условию Фано:

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

В этом наборе кодов условие Фано нарушено для кодов, соответствующих буквам «Б» (10) и «В» (100), так как код буквы «Б» совпадает с началом кода буквы «В».

В результате, например, строка 100 может быть декодирована неоднозначно — или как одна буква «В», или как пара букв «БА».

Следующая страница равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано1.3.3. Искажение информации

Cкачать материалы урока
равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

Источник

Равномерные и неравномерные двоичные коды. Условие Фано

Кодирование символов обычно предполагает, что каждому символу всегда сопоставляется одинаковое количество битов (например, в кодовой таблице ASCII каждому символу сопоставляется один байт, хранящий порядковый номер того или иного символа в этой таблице). Такой способ кодирования прост и удобен, однако очевидно, что он является не самым оптимальным. Для значительной части символов используются не все биты отведенных под них байтов (часть старших битов — нулевые), а при наличии в тексте только части символов, предусмотренных в таблице ASCII (например, если текст содержит только прописные русские буквы), приходится все равно использовать 8-битный код.

Более компактным является неравномерный двоичный код (особенно если при его построении исходить из частоты встречаемости различных символов и присваивать наиболее часто используемым знакам самые короткие коды, как это сделано в методе Хаффмана). При этом количество битов, отводимых для кодирования символов, в целом зависит от количества используемых в конкретном случае различных символов (от мощности алфавита), а коды, соответствующие разным символам, могут иметь различную длину в битах.

Главное при таком кодировании — обеспечить возможность однозначного декодирования записанной с помощью этих кодов строки (поочередного, слева направо, выделения и распознавания из сплошной последовательности нулей и единиц кодов отдельных букв). Для этого коды символам необходимо назначать в соответствии с условиями Фано.

Прямое условие Фано. Неравномерный код может быть однозначно декодирован, если никакой из кодов не совпадает с началом (префиксом) какого-либо другого, более длинного кода.

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

Обратное условие Фано. Неравномерный код может быть однозначно декодирован, если никакой из кодов не совпадает с окончанием (постфиксом) какого-либо другого, более длинного кода.

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

Для однозначности декодирования последовательности кодов достаточно выполнения хотя бы одного из двух вышеуказанных условий Фано:

— при выполнении прямого условия Фано последовательность кодов однозначно декодируется с начала;

— при выполнении обратного условия Фано последовательность кодов однозначно декодируется с конца.

Выбрать, какое из двух правил Фано используется при решении конкретной задачи, можно, проанализировав коды в условии задачи (без учёта кода, проверяемого в вариантах ответа): если для исходных кодов выполняется прямое правило Фано, то его и нужно использовать при решении, и наоборот.

Вместе с тем нужно помнить, что правила Фано — это достаточное, но не необходимое условие однозначного декодирования: если не выполняется ни прямое, ни обратное правило Фано, конкретная двоичная последовательность может оказаться такой, что она декодируется однозначно (так как остальные возможные варианты до конца декодирования довести не удаётся). В подобном случае необходимо пытаться строить дерево декодирования в обоих направлениях.

Рекомендуется начинать решение задач такого типа с анализа выполнимости правил Фано для исходных кодов, указанных в условии задачи (т.е. без учета искомого кода в вариантах ответов). В зависимости от того, какое из двух правил Фано выполняется для исходных кодов, при дальнейшем решении задачи производится сравнение более короткого кода с началом (при выполнении прямого правила Фано) или с концом (при выполнении обратного правила Фано) более длинного кода.

Если для заданной последовательности кодов выполняется прямое правило Фано, то её декодирование необходимо вести с начала (слева направо).

Если для заданной последовательности кодов выполняется обратное правило Фано, то её декодирование необходимо вести с конца (справа налево).

При сравнении пары кодов удобно подписывать более короткий код под более длинным, выравнивая эти записи по левому краю — для прямого правила Фано либо по правому краю — для обратного правила Фано.

Разбор типовых задач

Для кодирования некоторой последовательности, состоящей из букв А, Б, В, Г и Д, решили использовать неравномерный двоичный код, позволяющий однозначно декодировать двоичную последовательность, появляющуюся на приёмной стороне канала связи. Использовали код: А-1, Б-000, В-001, Г-011. Укажите, каким кодовым словом должна быть закодирована буква Д. Длина этого кодового слова должна быть наименьшей из всех возможных. Код должен удовлетворять свойству однозначного декодирования.

Источник

Равномерное и неравномерное кодирование условие фано

Здравствуйте! Меня зовут Александр Георгиевич. Я являюсь профессиональным репетитором в области информационных технологий, математике, баз данных и программирования.

Если у вас возникли затруднения с обработкой равномерного или неравномерного кода, то срочно записывайтесь ко мне на первый пробный урок, на которых мы с вами очень детально разберем все ваши вопросы и прорешаем большое количество различных тематических упражнений.

Чтобы гарантированно набрать на официальном экзамене ОГЭ или ЕГЭ по информатике высоченный балл берите сотовый телефон, дозванивайтесь до меня и задавайте любые интересующие вопросы.

Рекомендую использовать формат дистанционного обучения! Это выгодно, удобно и эффективно!

Что такое равномерный код и в каких случаях его применяют?

Допустим, вам требуется написать секретное письмо и отправить его своему другу. Вы – человек, проживающий на территории России, следовательно, использующий для написания слов буквы русского алфавита. И, вот, вы решаете закодировать ваше послание двоичным кодом, то есть вместо русских слов ваш друг получит набор цепочек, состоящий из нулей и единиц.

Но ваш соратник без особых проблем сможет провести дешифрацию вашего информационного сообщения, так как вы ему расскажете об алгоритме шифрации/дешифрации.

Символ

Равномерный код

Десятичное представление

Равномерный код – такой код, когда все символы какого-либо алфавита кодируются кодами одинаковой длины.

Что такое неравномерный код и в каких случаях его применяют?

Чтобы глубоко понять смысл неравномерного кодирования давайте представим, что вы работаете на продуктовом складе. Вы хотите оптимизировать свою работу и закодировать название каждого товара минимально возможным количеством бит.

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

Следует понять общий принцип неравномерного кода: суть его в том, чтобы кодировать наиболее часто используемые элементы как можно меньшим количеством бит, так как ими вы оперируете очень часто.

Неравномерный код – такой код, когда все элементы какого-либо множества кодируются кодом различной длины.

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

Итого, нам потребовалось два бита информации, чтобы закодировать в бинарном виде наиболее ходовых четыре товара.

А как поступить с наименее популярными товарами, например, муку и перец также достаточно часто покупают. В этом случае данные товары можно запрограммировать так:

Вы должны уловить общий принцип: чем наименее популярный товар, тем большим количеством бит он будет закодирован.

И все бы хорошо, но есть одна существенная проблема, возникающая при создании неравномерного кода, – проблема с однозначной дешифрацией. Для полного понимания данной проблемы вам следует познакомиться с условием Фано.

Равномерный код vs неравномерный код

Чтобы хорошо понимать в каких ситуациях стоит применять то или иное кодирование, вам нужно очень хорошо разобраться с частотой использования элементов, которые вы планируете закодировать. Если частота применения приблизительно равна у всех элементов, то смело применяйте равномерный код, в других случаях – неравномерный код.

А сейчас я вам предлагаю ознакомиться с мультимедийным решением, в котором я показываю, как правильно оперировать равномерным и неравномерным кодом.

Я хочу записаться к вам на индивидуальный урок по информатике и ИКТ

Если у вас остались какие-либо вопросы по рассматриваемой теме, то записывайтесь ко мне на первый пробный урок. Я репетитор-практик, следовательно, на своих уроках я уделяю максимум внимания решению заданий. Из теории лишь записываются самые базовые сведения: определения, тезисы, формулировки теорем и аксиом.

Специально для своих потенциальных клиентов я разработал стабильную многопараметрическую систему, состоящую из 144 вариантов нашего будущего взаимовыгодного сотрудничества. Даже самый взыскательный клиент сумеет выбрать вариант, полностью покрывающий его запросы.

Не откладывайте свое решение в долгий ящик. Я все-таки достаточно востребованный и квалифицированный репетитор, поэтому звоните прямо сейчас – количество ученических мест ограниченно!

Источник

Равномерное и неравномерное кодирование условие фано

Тема: Кодирование и декодирование информации.

· кодирование – это перевод информации с одного языка на другой (запись в другой системе символов, в другом алфавите)

· обычно кодированием называют перевод информации с «человеческого» языка на формальный, например, в двоичный код, а декодированием – обратный переход

· один символ исходного сообщения может заменяться одним символом нового кода или несколькими символами, а может быть и наоборот – несколько символов исходного сообщения заменяются одним символом в новом коде (китайские иероглифы обозначают целые слова и понятия)

· кодирование может быть равномерное и неравномерное;
при равномерном кодировании все символы кодируются кодами равной длины;
при неравномерном кодировании разные символы могут кодироваться кодами разной длины, это затрудняет декодирование

· закодированное сообщение можно однозначно декодировать с начала, если выполняется условие Фано: никакое кодовое слово не является началом другого кодового слова;

· закодированное сообщение можно однозначно декодировать с конца, если выполняется обратное условие Фано: никакое кодовое слово не является окончанием другого кодового слова;

· условие Фано – это достаточное, но не необходимое условие однозначного декодирования.

Пример задания:

Для кодирования некоторой последовательности, состоящей из букв А, Б, В, Г и Д, используется неравномерный двоичный код, позволяющий однозначно декодировать полученную двоичную последовательность. Вот этот код: А–00, Б–010, В–011, Г–101, Д–111. Можно ли сократить для одной из букв длину кодового слова так, чтобы код по-прежнему можно было декодировать однозначно? Коды остальных букв меняться не должны. Выберите правильный вариант ответа.

1) для буквы Б – 01 2) это невозможно

3) для буквы В – 01 4) для буквы Г – 01

Решение (1 способ, проверка условий Фано):

1) для однозначного декодирования достаточно, чтобы выполнялось условие Фано или обратное условие Фано;

2) проверяем последовательно варианты 1, 3 и 4; если ни один из них не подойдет, придется выбрать вариант 2 («это невозможно»);

«прямое» условие Фано не выполняется (код буквы Б совпадает с началом кода буквы В);

«обратное» условие Фано не выполняется (код буквы Б совпадает с окончанием кода буквы Г); поэтому этот вариант не подходит ;

«прямое» условие Фано не выполняется (код буквы В совпадает с началом кода буквы Б);

«обратное» условие Фано не выполняется (код буквы В совпадает с окончанием кода буквы Г); поэтому этот вариант не подходит ;

«прямое» условие Фано не выполняется (код буквы Г совпадает с началом кодов букв Б и В); но «обратное» условие Фано выполняется (код буквы Г не совпадает с окончанием кодов остальных буквы); поэтому этот вариант подходит ;

Решение (2 способ, дерево):

1) построим двоичное дерево, в котором от каждого узла отходит две ветки, соответствующие выбору следующей цифры кода – 0 или 1; разместим на этом дереве буквы А, Б, В, Г и Д так, чтобы их код получался как последовательность чисел на рёбрах, составляющих путь от корня до данной буквы (красным цветом выделен код буквы В – 011):

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

2) здесь однозначность декодирования получается за счёт того, что при движении от корня к любой букве в середине пути не встречается других букв (выполняется условие Фано);

3) теперь проверим варианты ответа: предлагается перенести одну из букв, Б, В или Г, в узел с кодом 01, выделенный синим цветом

4) видим, что при переносе любой из этих букв нарушится условие Фано; например, при переносе буквы Б в синий узел она оказывается на пути от корня до В, и т.д.; это значит, что предлагаемые варианты не позволяют выполнить прямое условие Фано

5) хочется уже выбрать вариант 2 («это невозможно»), но у нас есть еще обратное условие Фано, для которого тоже можно построить аналогичное дерево, в котором движение от корня к букве дает её код с конца (красным цветом выделен код буквы В – 011, записанный с конца):

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

видно, что обратное условие Фано также выполняется, потому что на пути от корня к любой букве нет других букв

6) в заданных вариантах ответа предлагается переместить букву Б, В или Г в синий узел; понятно, что Б или В туда перемещать нельзя – перемещённая буква отказывается на пути от корня к букве Г; а вот букву Г переместить можно, при этом обратное условие Фано сохранится

Ещё пример задания:

Для кодирования некоторой последовательности, состоящей из букв А, Б, В, Г и Д, решили использовать неравномерный двоичный код, позволяющий однозначно декодировать двоичную последовательность, появляющуюся на приёмной стороне канала связи. Использовали код:
А–1, Б–000, В–001, Г–011. Укажите, каким кодовым словом должна быть закодирована буква Д. Длина этого кодового слова должна быть наименьшей из всех возможных. Код должен удовлетворять свойству однозначного декодирования.

1) 00 2) 01 3)11 4) 010

8) заметим, что для известной части кода выполняется условие Фано – никакое кодовое слово не является началом другого кодового слова

9) если Д = 00, такая кодовая цепочка совпадает с началом Б = 000 и В = 001, невозможно однозначно раскодировать цепочку 000000: это может быть ДДД или ББ; поэтому первый вариант не подходит

10) если Д = 01, такая кодовая цепочка совпадает с началом Г = 011, невозможно однозначно раскодировать цепочку 011: это может быть ДА или Г; поэтому второй вариант тоже не подходит

11) если Д = 11, условие Фано тоже нарушено: кодовое слово А = 1 совпадает с началом кода буквы Д, невозможно однозначно раскодировать цепочку 111: это может быть ДА или ААА; третий вариант не подходит

12) для четвертого варианта, Д = 010, условие Фано не нарушено;

· условие Фано – это достаточное, но не необходимое условие однозначного декодирования, поэтому для уверенности полезно найти для всех «неправильных» вариантов контрпримеры: цепочки, для которых однозначное декодирование невозможно

Еще пример задания:

Для кодирования букв А, Б, В, Г решили использовать двухразрядные последовательные двоичные числа (от 00 до 11, соответственно). Если таким способом закодировать последовательность символов БАВГ и записать результат шестнадцатеричным кодом, то получится

14) из условия коды букв такие: A – 00, Б –01, В – 10 и Г – 11, код равномерный

15) последовательность БАВГ кодируется так: 01 00 10 11 = 1001011

16) разобьем такую запись на тетрады справа налево и каждую тетраду переведем в шестнадцатеричную систему (то есть, сначала в десятичную, а потом заменим все числа от 10 до 15 на буквы A, B, C, D, E, F); получаем

1001011 = 0100 10112 = 4B 16

17) правильный ответ – 1.

· расчет на то, что при переводе тетрад в шестнадцатеричную систему можно забыть заменить большие числа (10–15) на буквы (10112 = 11, получаем неверный ответ 41116)

· может быть дан неверный ответ, в котором нужные цифры поменяли местами (расчет на невнимательность), например, B 416

· в ответах дана последовательность, напоминающая исходную (неверный ответ BACD 16), чтобы сбить случайное угадывание

Еще пример задания:

Для 5 букв латинского алфавита заданы их двоичные коды (для некоторых букв – из двух бит, для некоторых – из трех). Эти коды представлены в таблице:

Источник

Мысли вслух

вторник, 23 октября 2012 г.

Ещё раз про однозначное декодирование

Введение

Для кодирования некоторой последовательности, состоящей из букв А, Б, В, Г и Д, используется неравномерный двоичный код, позволяющий однозначно декодировать полученную двоичную последовательность. Вот этот код: А — 00, Б — 01, В — 100, Г — 101, Д — 110. Можно ли сократить для одной из букв длину кодового слова так, чтобы код по-прежнему можно было декодировать однозначно? Коды остальных букв меняться не должны. Выберите правильный вариант ответа.
1) для буквы Д — 11; 2) это невозможно; 3) для буквы Г — 10; 4) для буквы Д — 10

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

Нужно сказать, что этот материал практически не рассматривается в существующих школьных учебниках информатики, поэтому все (как ученики, так и учителя) вынуждены разбираться самостоятельно. В то же время вузовские учебники 4, где соответствующая теория изложена строго и научно, достаточно сложны для понимания. Попробуем разобраться в сути кодирования и декодирования на школьном уровне, то есть так, как можно объяснить ученикам 8-11 классов.

В чём проблема?

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

Пример 1. Пусть для кодирования фразы «МАМА МЫЛА ЛАМУ» выбран такой код:

МАЫЛУпробел(1)
0010101011

Коды букв «сцепляются» в одну битовую строку и передаются, например, по сети:
Эта цепочка битов приходит в пункт назначения, и тут возникает проблема — как восстановить исходное сообщение (конечно, при условии, что мы знаем код, то есть знаем все пары «символ–кодовое слово», которые использовались при кодировании).

Итак, мы получили 0010011100010111010010. Легко понять, что при использовании кода (1) раскодировать такое сообщение можно самыми разными способами. Например, можно предположить, что оно составлено только из букв А (код 1) и Л (код 0). Тогда получаем
В общем, ни мамы, ни ламы.

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

Сказанное выше означает, что код (1) НЕ является однозначно декодируемым. Как же определить, является ли заданный код однозначно декодируемым? Этим вопросом мы и займемся.

Равномерные коды

Проблема состоит в том, чтобы правильно разбить полученную битовую цепочку на отдельные кодовые слова. Для того, чтобы её решить, можно, например, использовать равномерный код, то есть код, в котором все кодовые слова имеют одинаковую длину. Например, в нашей фразе 6 символов, поэтому можно использовать 3-битный код (который позволяет закодировать 8 = 2 3 различных символов).

Пример 2. Закодируем фразу из примера 1, используя код:

МАЫЛУпробел(2)
000001010011100101

Получаем закодированное сообщение
Длина этого сообщения — 42 бита вместо 22 в предыдущем варианте, зато его легко разбить на отдельные кодовые слова и раскодировать («_» обозначает пробел):
Видим, что равномерные коды неэкономичны (закодированное сообщение в примере 2 почти в два раза длиннее, чем в примере 1), но зато декодируются однозначно.

Неравномерные коды

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

Пример 3. Используем для кодирования фразы из примера 1 следующий код:

МАЫЛУпробел(3)
01001011100101011

Получаем
Здесь 34 бита. Это, конечно, не 22, но и не 42.

Несложно показать, что эта битовая цепочка декодируется однозначно. Действительно, первая буква — М (код 01), потому что ни одно другое кодовое слово не начинается с 01. Аналогично определяем, что вторая буква — А. Действительно, за 01 следует 00 (код буквы А) и никакое другое кодовое слово не начинается с 00. Это же свойство, которое называется условием Фано, выполняется не только для кодовых слов 01 и 00, но и кодовых слов всех других букв (проверьте это самостоятельно).

Условие Фано. Никакое кодовое слово не совпадает с началом другого кодового слова.

Коды, для которых выполняется условие Фано, называют префиксными (префикс слова — это его начальный фрагмент). Все сообщения, закодированные с помощью префиксных кодов, декодируются однозначно.
Префиксные коды имеют важное практическое значение — они позволяют декодировать символы полученного сообщение по мере его получения, не дожидаясь, пока всё сообщение будет доставлено получателю.

Упражнение. Расшифруйте сообщение, закодированное кодом (3). При расшифровке кода очередной буквы не заглядывайте вперёд!
Термины «условие Фано» и «префиксный код» не используются в заданиях ЕГЭ и ГИА, однако для решения этих задача важно, чтобы ученики понимали содержание условия Фано.

Пример 4. Рассмотрим ещё один код

МАЫЛУпробел(4)
10001101001010111

Ясно, что он не является префиксным: код буквы А (00) совпадает с началом кода буквы Л (001) и код пробела (11) совпадает с началом кода буквы Ы (11). Закодированное сообщение
также имеет длину 34 бита, как и при использовании кода (3). Начнем раскодировать с начала. Ясно, что первой стоит буква М, потому что ни один другой код не начинается с 10. Затем — комбинация 001, которая может быть кодом буквы Л или кодом буквы А (00), за которым следует код буквы Ы или пробела. Получается, что для декодирования сообщения нам нужно «заглядывать вперёд», что очень неудобно.

Попробуем декодировать с конца битовой строки. Последние биты 0101 могут представлять только букву У, следующие 10 — только букву М и т.д. Можно проверить, что теперь сообщение однозначно декодируется с конца! Это происходит потому, что выполняется условие, которое можно назвать «обратным» условием Фано: никакое кодовое слово не совпадает с окончанием другого кодового слова. Коды, для которых выполняется обратное условие Фано, называют постфиксными (постфикс или суффикс слова — это его конечный фрагмент). В этом случае тоже обеспечивается однозначное декодирование. Таким образом,

Сообщение декодируется однозначно, если для используемого кода выполняется прямое или обратное условие Фано.

Однозначно декодируемые коды

Пример 5. Рассмотрим код, предназначенный для кодирования сообщений, состоящих только из букв А, Б и В:

АБВ(5)
011010

Так как код буквы А (0) совпадает как с началом, так и с концом кода буквы В (010), для этого кода не выполняются ни прямое, ни обратное условие Фано. Поэтому пока мы не можем с уверенностью сказать, декодируется ли он однозначно.

Закодируем сообщение
и попытаемся раскодировать эту строку, используя код (5). В первую очередь, замечаем, что две соседние единицы могут появиться только при использовании буквы Б (код 11), поэтому сразу выделяем две таких группы:
Здесь жёлтым фоном выделена уже декодированная часть сообщения. В оставшейся части единица может появиться только в коде буквы В (010), в битовой строке находим две такие группы:
Оставшиеся нули — это коды букв А. Анализ алгоритма показывает, что такой код всегда однозначно декодируется.

Полный ответ на вопрос об однозначной декодируемости получил в начале 1960-х годов советский математик Ал.А. Марков, предложивший решение с помощью графов [2]. Продемонстрируем его метод на примере.

Пример 6. Рассмотрим код

АБВГД(6)
0101001111101

Здесь не выполняется ни «прямое», ни «обратное» условие Фано, поэтому возможно, что декодировать сообщение однозначно не удастся. Но утверждать это заранее нельзя.

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

Код является однозначно декодируемым тогда и только тогда, когда в построенном таким образом графе нет ориентированных циклов, включающих вершину Λ.

Таким образом, код (6) не обладает свойством однозначной декодируемости.

Проверим таким же способом код (5), который, как мы уже выяснили, не является ни префиксным, ни постфиксным. Множество последовательностей, которые совпадают с началом и концом кодовых слов, состоит из пустой строки и единицы: <Λ, 1>. Граф, построенный с помощью приведённого выше алгоритма, содержит два узла и одну петлю:

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

В этом графе нет цикла, содержащего вершину Λ, поэтому любое сообщение, записанное с помощью такого кода, декодируется однозначно. Выше мы показали это с помощью простых рассуждений.

Нужно отметить, что на практике применяются, главным образом, префиксные коды, поскольку они позволяют декодировать сообщение по мере его получения, не дожидаясь окончания приёма данных.

Ещё примеры

Пример 7. Рассмотрим задачу А9 из демо-варианта КИМ ЕГЭ-2013 [1], которая сформулирована в начале статьи. Нужно оптимизировать код
выбрав один из вариантов
Решение. Сначала давайте посмотрим на исходный код, приведённый в условии. Можно заметить, что он префиксный — для него выполняется условие Фано: ни один из трехбитных кодов не начинается ни с 00 (код А), ни с 01 (код Б). Поэтому сообщения, закодированные с помощью такого кода, декодируются однозначно.

Заметим, что «обратное» условие Фано не выполняется: код буквы А (00) совпадает с окончанием кода буквы В (100), а код буквы Б (01) совпадает с окончанием кода буквы Г (101).

Теперь проверим, что получится, если сократить код буквы Д до 11 (вариант 1). Свойство однозначной декодируемости может быть потеряно только тогда, когда в результате такого сокращения нарушится условие Фано, то есть код буквы Д совпадёт с началом какого-то другого кодового слова. Видим, что этого не произошло — нет других кодовых слов, которые начинаются с 11, поэтому вариант 1 — это и есть верное решение.

Остается убедиться, что варианты 3 и 4 не подходят. Если мы сократим код буквы Г до 10 (вариант 3), условие Фано оказывается нарушенным, так как теперь код буквы Г (10) совпал с началом кода буквы В (100). Одновременно нарушено и «обратное» условие Фано: код буквы А (00) совпадает с окончанием кода буквы В (100). Но, как мы знаем, при этом код может всё-таки быть однозначно декодируемым.

Конечно, можно построить граф, как было сделано выше, и проверить, есть ли в нём циклы, включающие вершину Λ. В данном случае граф выглядит так:

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

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

Наконец, нужно убедиться, что вариант 4 не удовлетворяет условию. Если мы сократим код буквы Д до 10, условие Фано оказывается нарушенным, так как теперь код буквы Д (10) совпал с началом кода буквы В (100). Как и раньше, нарушено «обратное» условие Фано: код буквы А (00) совпадает с окончанием кода буквы В (100) и код буквы Б (01) совпадает с окончанием кода буквы Г (101).

Построим граф по методу Ал.А. Маркова:

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано

Пример 8. Оптимизируйте код
сохранив свойство однозначной декодируемости сообщений. Выберите один из вариантов:
Решение. Определим, за счёт чего обеспечивается однозначная декодируемость исходного кода. Легко видеть, что код префиксный — для него выполняется условие Фано: ни одно из трёхбитовых кодовых слов не начинается ни с 11 (код А), ни с 10 (код Б). В то же время, обратное условие Фано не выполняется, потому что код буквы А (11) совпадает с окончанием кода буквы В (011).

Проверим вариант 1 — сократим код буквы Г до 00. При этом нарушилось условие Фано, которое обеспечивало однозначную декодируемость исходного варианта: теперь код буквы Г (00) совпадает с началом кода буквы Д (001). Но и обратное условие Фано тоже не выполняется для пары букв А-В. Поэтому можно предположить, что такой код не обладает свойством однозначной декодируемости. И действительно, легко находится цепочка 001011, которую можно раскодировать как ГБА (00 10 11) или ДВ (001 011).

Рассмотрим вариант 3 — сократим код буквы В до 01. При этом условие Фано выполняется, поскольку ни одно из кодовых слов не начинается с 01, то есть код является префиксным и однозначно раскодируется. Это и есть правильный ответ.

На всякий случай проверяем вариант 4 — сокращает код буквы Б до 1. При этом код перестает быть префиксным, и обратное условие Фано также не выполнено (код буквы Б совпадает с началом и концом кода буквы А). Сразу понятно, что последовательность 11 можно раскодировать как А или как ББ, поэтому этот вариант неверный.

Выводы

В заметке выполнен подробный анализ задачи на кодирование, которая предлагается на ЕГЭ в последние несколько лет. Нужно заметить, что в нём затрагивается вузовский курс дискретной математики. Понятно, что нельзя требовать от школьников знания теорем Ал.А. Маркова об однозначном декодировании, но учителю полезно более глубоко представлять себе эти вопросы, которые можно разбирать на факультативах. В качестве дополнительной литературы по этой теме можно рекомендовать 4.

С точки зрения практического подхода, для решения всех известных автору реальных задач подобного типа достаточно найти вариант, при котором выполняется условие Фано или обратное условие Фано (одно из двух!).

Литература

Комментарии: 16:

Спасибо, что «на пальцах» объяснили еще раз!

Действительно, спасибо. Очень понятно.

Просто великолепная статья!
Спасибо!

Уважаемый Константин! Бесконечно благодарна Вам за неоценимую помощь в подготовке детей к ЕГЭ по информатике.

Спасибо), всё понятно)))

Отличная статья! Спасибо!

Спасибо за статью. В учебнике информатики 10 класса Полякова содержится опечатка в последовательности построения графа Маркова, которая, при всей схожести текста, исправлена у вас. Порадовало также более ясное объяснение примеров.

> В учебнике информатики 10 класса Полякова содержится опечатка
Да, действительно была в первом издании. Сейчас исправлена.

Программа, скачанная отсюда, на codeTable = выдала следующий список вершин графа: [‘Lambda’, ‘0’, ‘1’].
Но разве ‘2’ не должна входит в список вершни, так как является началом ‘E’ и концом ‘C’ и не является кодовым словом?

> Но разве ‘2’ не должна входит в список вершин, так как является началом
> ‘E’ и концом ‘C’ и не является кодовым словом?
Программа предназначена только для обработки двоичных кодов.

А как можно доказать на пальцах, что из отсутствия данного граф-цикла следует однозначность декодируемости? А то зашел в учебник Маркова, а там просто жесть какая-то. Развитие моего ума не позволяет мне это изучить в разумные сроки.

Последний граф для кода А — 00, Б — 01, В — 100, Г — 101, Д — 10 составлен не совсем точно.
Нужно еще из вершины Λ в вершину 1 провести дугу Д → Г.

Подпишитесь на каналы Комментарии к сообщению [Atom]

равномерное и неравномерное кодирование условие фано. Смотреть фото равномерное и неравномерное кодирование условие фано. Смотреть картинку равномерное и неравномерное кодирование условие фано. Картинка про равномерное и неравномерное кодирование условие фано. Фото равномерное и неравномерное кодирование условие фано Константин Поляков Санкт-Петербург

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *