← Все вопросы

условие фано простыми словами, не пойму это задание про коды букв

Задан 10 месяцев назад977 просмотров2 ответа
6

В задании дают коды для букв, например А=0, Б=10, В=11, и спрашивают выполняется ли условие Фано. Я вообще не понимаю что от меня хотят и что это за Фано такое.

Учитель что-то говорил про «никакой код не начало другого», но в голове не уложилось. Можете на пальцах объяснить, как проверять, и зачем это вообще нужно? А то на экзамене точно завалю.

2 ответа

11
✓ Принятый ответ — помог автору

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

Берём твой пример: А=0, Б=10, В=11. Проверяем каждый код — не является ли он началом какого-то другого:

  • 0 (А): начинается ли с 0 код Б (10)? Нет. Код В (11)? Нет. Ок.
  • 10 (Б): начинается ли с 10 код В (11)? Нет. Ок.
  • 11 (В): ни один с него не начинается. Ок.

Условие Фано выполняется. Проверим на деле: возьмём цепочку 0 10 11 = 01011. Декодируем слева: видим 0 — это сразу А (других кодов с 0 нет). Дальше 1... одного 1 ни у кого нет, берём 10 — это Б. Осталось 11 — это В. Получили АБВ однозначно, без вариантов.

А теперь контрпример, где Фано НЕ выполняется: А=1, Б=10. Тут код А (1) является началом кода Б (10). Цепочку 10 уже не разберёшь однозначно: то ли это Б, то ли А+ещё что-то. Каша.

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

Ещё лайфхак: если в каком-то коде есть код покороче «в начале» — значит провал. Поэтому самые короткие коды самые опасные, их и проверяй внимательнее всего.

3

Короткое запоминание: «префиксный код = ни один код не префикс другого = можно читать без пробелов».

Частая ловушка в заданиях: коды РАЗНОЙ длины. Если бы все коды были одной длины, Фано выполняется автоматически (одинаковые не могут быть началом друг друга). Проблемы только когда длины разные — туда и смотри.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект