Еще пример задания:
Для 5 букв латинского алфавита заданы их двоичные коды (для некоторых букв – из двух бит, для некоторых – из трех). Эти коды представлены в таблице:
A | B | C | D | E |
000 | 01 | 100 | 10 | 011 |
Определить, какой набор букв закодирован двоичной строкой 0110100011000
1) EBCEA 2) BDDEA 3) BDCEA 4) EBAEA
Решение (вариант 1, декодирование с начала):
здесь используется неравномерное кодирование, при котором декодирование может быть неоднозначным, то есть, заданному коду может соответствовать несколько разных исходных сообщений
попробуем декодировать с начала цепочки, первой буквой может быть B или E, эти случаи нужно рассматривать отдельно
пусть первая буква – E с кодом 011, тогда остается цепочка 0100011000
для кода 0100011000 первой буквой может быть только B с кодом 01, тогда остается 00011000 ( начало исходной цепочки – EB?)
для кода 00011000 первой буквой может быть только A с кодом 000, тогда остается 11000, а эта цепочка не может быть разложена на заданные коды букв
поэтому наше предположение о том, что первая буква – E, неверно
пусть первая буква – B с кодом 01, тогда остается цепочка 10100011000
для кода 10100011000 первой буквой может быть только D с кодом 10, тогда остается 100011000 (можно полагать, что начало исходной цепочки – BD?)
для кода 100011000 первой буквой может быть только С с кодом 100, тогда остается 011000 (начало исходной цепочки – BDC?)
Несмотря на то, что среди ответов есть единственная цепочка, которая начинается с BDC, здесь нельзя останавливаться, потому что «хвост» цепочки может «не сойтись»
для кода 011000 на первом месте может быть B (код 01) или E (011); в первом случае «хвост» 1000 нельзя разбить на заданные коды букв, а во втором – остается код 000 (буква А), поэтому исходная цепочка может быть декодирована как BDCEA
правильный ответ – 3
Возможные ловушки и проблемы: при декодировании неравномерных кодов может быть очень много вариантов, их нужно рассмотреть все; это требует серьезных усилий и можно легко запутаться нельзя останавливаться, не закончив декодирование до конца и не убедившись, что все «сходится», на это обычно и рассчитаны неверные ответы |
Решение (вариант 2, декодирование с конца):
для кода 0110100011000 последней буквой может быть только А (код 000), тогда остается цепочка 0110100011
для 0110100011 последней может быть только буква E (011), тогда остается цепочка 0110100
для 0110100 последней может быть только буква C (100), тогда остается цепочка 0110
для 0110 последней может быть только буква D (10), тогда остается 01 – это код буквы B
таким образом, получилась цепочка BDCEA
правильный ответ – 3
Возможные ловушки и проблемы: при декодировании неравномерных кодов может быть очень много вариантов (здесь случайно получилась единственно возможная цепочка), их нужно рассмотреть все; это требует серьезных усилий и можно легко запутаться нельзя останавливаться, не закончив декодирование до конца и не убедившись, что все «сходится», на это обычно и рассчитаны неверные ответы |
Решение (вариант 3, кодирование ответов):
в данном случае самое простое и надежное – просто закодировать все ответы, используя приведенную таблицу кодов, а затем сравнить результаты с заданной цепочкой
получим
1) EBCEA – 01101100011000 2) BDDEA – 011010011000
3) BDCEA – 0110100011000 4) EBAEA – 01101000011000
сравнивая эти цепочки с заданной, находим, что правильный ответ – 3.
Возможные проблемы: сложно сравнивать длинные двоичные последовательности, поскольку они однородны, содержат много одинаковых нулей и единиц |