Чому цей код однозначно розшифровується?


21

Джерело алфавіту: {a,b,c,d,e,f}

Код алфавіту: {0,1}

  • a:0101
  • b:1001
  • c:10
  • d:000
  • e:11
  • f:100

Я вважав, що для того, щоб код був унікальним для декодування, він повинен бути без префіксу. Але в цьому коді кодове слово c є префіксом кодового слова f наприклад, тому воно не є префіксом. Однак мій підручник говорить мені, що його зворотний бік не має префікса (я цього не розумію), і тому його можна однозначно декодувати. Чи може хтось пояснити, що це означає, або чому це однозначно розшифровується? Я знаю, що це задовольняє нерівність Крафта, але це лише необхідна умова, а не достатня умова.


10
Без префіксальних даних передбачається однозначне декодируемость, але це не твердження "якщо і тільки якщо". Дивіться, наприклад, тут .
dkaeae

Гаразд, я бачу, але моя текстова книга говорить про це: Код А однозначно розшифровується, оскільки його зворотний бік є префікс-вільним, настільки однозначно розширюваний Ви розумієте, що вони означають під його зворотом?
2000mroliver

1
Напевно, просто код, отриманий за допомогою реверсування всіх кодових слів.
dkaeae

і чому це означає однозначно декодируемость, я цього не розумію
2000mroliver

1
cможе бути префіксом bі f, але залишкові суфікси не існують у коді. Коли ви перевертаєте код, суфікси стають префіксами, а потім він стає префіксальним.
Вармар

Відповіді:


26

Ваш код має властивість, що якщо ви перевернете всі кодові слова, то ви отримаєте код префікса. Це означає, що ваш код однозначно декодируемий.

Дійсно, розглянемо будь-який код C=x1,,xn якій зворотна CR:=x1R,,xnR однозначно декодіруемой. Я стверджую, що C також унікально розширюється. Це тому, що

w=xi1xim if and only if wR=ximRxi1R.
На словах розкладання w в кодові слова C знаходяться у взаємно однозначна відповідність з розбивками wR в кодові слова з CR . Оскільки останні є унікальними, так і перші.

Оскільки коди префіксу однозначно декодируеми, то випливає, що реверс коду префікса також однозначно декодируемый. Це так у вашому прикладі.

C

i=1n2|xi|1.

0,01,110.
111001001010

prefix00010011001110codeword001001
1


2
Здається, що в прикладі ОП ми не можемо розшифрувати перше кодове слово після фіксованої кількості цифр, існує нескінченно багато випадків: 1001010101010101…може бути або, fcccccc…або caaa…нам може знадобитися почекати до кінця введення, щоб вирішити.
Бергі

1
1,10,00

4
@Bergi Це завжди декодируемо для будь-якої обмеженої кількості цифр. Завжди існує лише один спосіб декодування кодування без залишків. Будь-яка інша спроба закінчиться запасними 1 або 0. Це тому, що код однозначно розшифровується, якщо ми читаємо його хвостом спочатку. Теоретично, якщо щось однозначно розширюється в одному напрямку, немає сенсу, що може бути більше одного рішення в іншому напрямку
slebetman

@slebetman Я мав на увазі кінцевий префікс (з можливими залишками). Так, якщо ми беремо весь вхід, він завжди розшифровується.
Бергі

5

Якщо я надішлю вам будь-яке повідомлення, яке ви повинні розшифрувати, ви можете зробити наступне: Зворотне повідомлення, починаючи з останнього біта замість першого біта. Переверніть кодові слова. Розшифруйте повідомлення. Зворотний декодований рядок.

Ви можете це зробити, тому що після повернення до шести кодових слів ви отримуєте код без префіксу: 1010, 1001, 01, 000, 11, 001 є префіксом безкоштовно.


0

Якщо без префіксу означає те, що я думаю, зворотний бік 'a' починається з 1, або 10, або 101, жоден з яких не є іншим цілком дійсним кодом.

Отже, якщо повідомлення закінчується на 0101, воно може бути лише "a", і ви можете застосувати аналогічну логіку до попередніх бітів.

Однак, що робити, якщо немає кінця для початку? Ну, якщо перший біт дорівнює 1, ви знаєте, що це не 'а' або 'd'. Другий біт усуне 'e' або {'b', 'c', 'f'}. Третій біт може звести його до одного вибору, але якщо ні, він є унікальним за четвертим бітом.

Як тільки ви перейдете до унікальної послідовності, ви перезапустите алгоритм на наступному біті.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.