Правило фано – А9 — ЕГЭ по информатике
Условие Фано — Википедия (с комментариями)
Материал из Википедии — свободной энциклопедии
Условие Фано (англ. Fano condition, в честь Роберта Фано) — в теории кодирования необходимое условие построения самотерминирующегося кода (в другой терминологии, префиксного кода). Обычная формулировка этого условия выглядит так:
- Никакое кодовое слово не может быть началом другого кодового слова.
Более «математическая» формулировка:
- Если в код входит слово a, то для любой непустой строки b слова ab в коде не существует.
Примером кода, удовлетворяющего условию Фано, являются телефонные номера в традиционной телефонии. Если в сети существует номер 101, то номер 1012345 не может быть выдан: при наборе трёх цифр АТС прекращает понимать дальнейший набор и соединяет с адресатом по номеру 101. Однако для набора с сотового телефона это правило уже не действует, потому что требуется явное завершение последовательности знаков соответствующей кнопкой (обычно — с изображением зелёной трубки), при этом 101, 1010 и 1012345 могут одновременно пониматься как разные адресаты.
Термин «условие Фано» не является традиционным для русскоязычного сообщества.
См. также
Напишите отзыв о статье «Условие Фано»
Литература
- Бауэр Ф., Гооз Г. Информатика. М., «Мир», 1990 г. — Т. 1.
Ссылки
- [it.kgsu.ru/TI_3/tkod_010.html Код Хаффмана]
Отрывок, характеризующий Условие Фано
Николай Ростов испытывал вполне это блаженство, после 1807 года продолжая служить в Павлоградском полку, в котором он уже командовал эскадроном, принятым от Денисова.Ростов сделался загрубелым, добрым малым, которого московские знакомые нашли бы несколько mauvais genre [дурного тона], но который был любим и уважаем товарищами, подчиненными и начальством и который был доволен своей жизнью. В последнее время, в 1809 году, он чаще в письмах из дому находил сетования матери на то, что дела расстраиваются хуже и хуже, и что пора бы ему приехать домой, обрадовать и успокоить стариков родителей.
Читая эти письма, Николай испытывал страх, что хотят вывести его из той среды, в которой он, оградив себя от всей житейской путаницы, жил так тихо и спокойно. Он чувствовал, что рано или поздно придется опять вступить в тот омут жизни с расстройствами и поправлениями дел, с учетами управляющих, ссорами, интригами, с связями, с обществом, с любовью Сони и обещанием ей. Всё это было страшно трудно, запутано, и он отвечал на письма матери, холодными классическими письмами, начинавшимися: Ma chere maman [Моя милая матушка] и кончавшимися: votre obeissant fils, [Ваш послушный сын,] умалчивая о том, когда он намерен приехать. В 1810 году он получил письма родных, в которых извещали его о помолвке Наташи с Болконским и о том, что свадьба будет через год, потому что старый князь не согласен. Это письмо огорчило, оскорбило Николая. Во первых, ему жалко было потерять из дома Наташу, которую он любил больше всех из семьи; во вторых, он с своей гусарской точки зрения жалел о том, что его не было при этом, потому что он бы показал этому Болконскому, что совсем не такая большая честь родство с ним и что, ежели он любит Наташу, то может обойтись и без разрешения сумасбродного отца. Минуту он колебался не попроситься ли в отпуск, чтоб увидать Наташу невестой, но тут подошли маневры, пришли соображения о Соне, о путанице, и Николай опять отложил. Но весной того же года он получил письмо матери, писавшей тайно от графа, и письмо это убедило его ехать. Она писала, что ежели Николай не приедет и не возьмется за дела, то всё именье пойдет с молотка и все пойдут по миру. Граф так слаб, так вверился Митеньке, и так добр, и так все его обманывают, что всё идет хуже и хуже. «Ради Бога, умоляю тебя, приезжай сейчас же, ежели ты не хочешь сделать меня и всё твое семейство несчастными», писала графиня.
wiki-org.ru
Двоичный код удовлетворяющий условию фано. Готовимся к ЕГЭ по информатике. Условие Фано
Информатика — Кодирование
1. Основные понятия
Закодировать текст – значит сопоставить ему другой текст. Кодирование применяется при передаче данных – для того, чтобы зашифровать текст от посторонних, чтобы сделать передачу данных более надежной, потому что канал передачи данных может передавать только ограниченный набор символов (например, — только два символа, 0 и 1) и по другим причинам.
При кодировании заранее определяют алфавит, в котором записаны исходные тексты (исходный алфавит) и алфавит, в котором записаны закодированные тексты (коды), этот алфавит называется кодовым алфавитом. В качестве кодового алфавита часто используют двоичный алфавит, состоящий из двух символов (битов) 0 и 1. Слова в двоичном алфавите иногда называют битовыми последовательностями.
2. Побуквенное кодирование
Наиболее простой способ кодирования – побуквенный. При побуквенном кодировании каждому символу из исходного алфавита сопоставляется кодовое слово – слово в кодовом алфавите. Иногда вместо «кодовое слово буквы» говорят просто «код буквы». При побуквенном кодировании текста коды всех символов записываются подряд, без разделителей.
Пример 1. Исходный алфавит – алфавит русских букв, строчные и прописные буквы не различаются. Размер алфавита – 33 символа.
Кодовый алфавит – алфавит десятичных цифр. Размер алфавита — 10 символов.
Применяется побуквенное кодирование по следующему правилу: буква кодируется ее номером в алфавите: код буквы А – 1; буквы Я – 33 и т.д.
Тогда код слова АББА – это 1221.
Внимание: Последовательность 1221 может означать не только АББА, но и КУ (К – 12-я буква в алфавите, а У – 21-я буква). Про такой код говорят, что он НЕ допускает
Пример 2. Исходный и кодовый алфавиты – те же, что в примере 1. Каждая буква также кодируется своим номером в алфавите, НО номер всегда записывается двумя цифрами: к записи однозначных чисел слева добавляется 0. Например, код А – 01, код Б – 02 и т.д.
В этом случае кодом текста АББА будет 01020201. И расшифровать этот код можно только одним способом. Для расшифровки достаточно разбить кодовый текст 01020201 на двойки: 01 02 02 01 и для каждой двойки определить соответствующую ей букву.
Такой способ кодирования называется равномерным. Равномерное кодирование всегда допускает однозначное декодирование.
Далее рассматривается только побуквенное кодирование
3. Неравномерное кодирование
Равномерное кодирование удобно для декодирования. Однако часто применяют и неравномерные коды, т.е. коды с различной длиной кодовых слов. Это полезно, когда в исходном тексте разные буквы встречаются с разной частотой. Тогда часто встречающиеся символы стоит кодировать более короткими словами, а редкие – более длинными. Из примера 1 видно, что (в отличие от равномерных кодов!) не все неравномерные коды допускают однозначное декодирование.
Есть простое условие, при выполнении которого неравномерный код допускает однозначное декодирование.
Код называется префиксным, если в нем нет ни одного кодового слова, которое было бы началом (по-научному, — префиксом) другого кодового слова.
Код из примера 1 – НЕ префиксный, так как, например, код буквы А (т.е. кодовое слово 1) – префикс кода буквы К (т.е. кодового слова 12, префикс выделен жирным шрифтом).
Код из примера 2 (и любой другой равномерный код) – префиксный: никакое слово не может быть началом слова той же длины.
Пример 3. Пусть исходный алфавит включает 9 символов: А, Л, М, О, П, Р, У, Ы, -. Кодовый алфавит – двоичный. Кодовые слова:
Кодовые слова выписаны в алфавитном порядке. Видно, что ни одно из них не является началом другого. Это можно проиллюстрировать рисунком
На рисунке изображено бинарное дерево. Его корень расположен слева. Из каждого внутреннего узла выходит два ребра. Верхнее ребро имеет пометку 0, нижнее – пометку 1. Таким образом, каждому узлу соответствует слово в двоичном алфавите. Если слово X является началом (префиксом) слова Y, то узел, соответствующий слову X, находится на пути из корня в узел, соответствующий слову Y. Наши кодовые слова находятся в листьях дерева. Поэтому ни одно из них не является началом другого.
Теорема (условие Фано). Любой префиксный код (а не только равномерный) допускает однозначное декодирование.
Разбор примера (вместо доказательства). Рассмотрим закодированный текст, полученный с помощью кода из примера 3:
0100010010001110110100100111000011100
Будем его декодировать таким способом. Двигаемся слева направо, пока не обнаружим код какой-то буквы. 0 – не кодовое слово, а 01 – код буквы М.
0100010010001110110100100111000011100
Значит, исходный текст начинается с буквы М: код никакой другой буквы не начинается с 01! «Отложим» начальные 01 в сторону и продолжим.
01 00010010001110110100100111000011100 МДалее таким же образом находим следующее кодовое слово 00 – код буквы А.
01 00010010001110110100100111000011100 М АДоведите расшифровку текста до конца самостоятельно. Убедитесь, что он расшифровывается (декодируется) однозначно.
Замечание. В расшифрованном тексте 14 букв. Т.к. в алфавите 9 букв, то при равномерном двоичном кодировании пришлось бы использовать кодовые слова длины 4. Таким образом, при равномерном кодировании закодированный текст имел бы длину 56 символов – в полтора раза больше, чем в нашем примере (у нас 37 символов).
4. Как все это повторять. Задачи на понимание
Знание приведенного выше материала достаточно для решения задачи 5 из демо-варианта и близких к ней (см. здесь). Повторять (учить) этот материал стоит в том порядке, в котором он изложен. При этом нужно решать простые задачи – до тех пор, пока не будет достигнуто полное понимание. Ниже приведены возможные типы таких задач. Опытные учителя легко придумают (или подберут) конкретные задачи таких типов. Если будут вопросы – пишите.
1) Понятие побуквенного кодирования.
Дан алфавит Ф и кодовые слова для всех слов в алфавите Ф. Закодировать заданный текст в алфавите Ф. Коды могут быть с использованием разных кодовых алфавитов, равномерные и неравномерные.
2) Префиксные неравномерные коды.
2.1) Дан алфавит Ф и двоичный префиксный код для этого алфавита. Построить дерево кода (см. рис.1) и убедиться, что код – префиксный.
2.2) Дан алфавит Ф и двоичный префиксный код для этого алфавита. Декодировать (анализом слева направо) данный текст в кодовом алфавите.
2.3) Дан алфавит Ф и кодовые слова для всех слов в алфавите Ф. Определить, является ли данный код префиксным, или нет. В качестве примеров полезно приводить:
— Равномерный код. — Неравномерный префиксный код (полезно нарисовать депево этого кода как на рис.1). — Различные пополнения данного неравномерного префиксного кода с помощью кода еще одной буквы так, чтобы полученный код либо оставался префиксным, либо переставал им быть. При анализе дополнительной буквы полезно использовать дерево исходного кода. Полезно рассмотреть различные варианты «потери префиксности»: (а) новый код – начало одного из старых; (б) один из старых кодов – начало нового.2.4) Решать задачи для самостоятельного решения, например, отсюда
ege-go.ru