Урок 7. Двоичное кодирование

На прошлых уроках мы говорили о том, как компьютер хранит файлы и как работает программное обеспечение. Но вы когда-нибудь задумывались, как именно «железо», состоящее из кремния и меди, понимаете текст, который вы печатаете, или картинку, которую вы открываете?
Сегодня мы спустимся на самый фундаментальный уровень информатики и разберём тему «Двоичное кодирование». Это ключ к пониманию того, как вообще работает цифровое пространство.

1. Информация, данные и знания

Прежде чем кодировать, давайте разберёмся, что мы кодируем. В информатике чётко разделяют три понятия:
  • Данные — это зарегистрированные сигналы или символы, которые сами по себе могут не иметь смысла. Пример: число «36.6», слово «красный», последовательность «10110».
  • Информация — это данные, помещённые в контекст, которые уменьшают неопределённость и имеют смысл для получателя. Пример: «Температура тела 36.6 °C», «Светофор горит красным светом».
  • Знания — это выявленные закономерности, связи и правила, которые позволяют использовать информацию для принятия решений. Пример: «Если температура 36.6 °C, то человек здоров», «Если светофор красный, нужно остановиться».
Компьютер работает только с данными. Наша задача как людей — превратить наши знания и информацию в форму данных, понятную машине.

2. Универсальность дискретного представления информации

В реальном мире информация часто бывает непрерывной (аналоговой): плавное изменение звука голосовой связки, плавный переход цветов в закате, плавное движение стрелки часов.
Компьютер не умеет работать с бесконечной плавностью. Ему нужно дискретное (прерывистое) представление.
  • Дискретизация — это процесс превращения непрерывной величины в набор отдельных значений (как лестница вместо пандуса).
  • Звук разбивается на отдельные отсчёты (сэмплы).
  • Изображение разбивается на отдельные точки (пиксели).
  • Текст разбивается на отдельные символы (буквы, цифры, знаки).
Универсальность этого метода в том, что любую информацию (текст, звук, видео, 3D-модель) можно оцифровать, то есть представить в виде конечного набора чисел. А любые числа можно выразить через символы.

3. Двоичное кодирование

Почему именно двоичная система? Потому что технически проще и надёжнее всего создать устройство, имеющее два устойчивых состояния:
  • Есть ток / нет тока
  • Намагничено / не намагничено
  • Отражает свет / поглощает свет
Эти два состояния мы обозначаем цифрами 0 и 1. Минимальная единица информации, которая может принимать значение 0 или 1, называется бит (binary digit).
Двоичное кодирование — это процесс сопоставления каждому символу алфавита (букве, цифре, знаку) уникальной последовательности битов (двоичного кода).

Основная формула: Если алфавит содержит N символов, то для кодирования каждого символа потребуется бит, где

N=2i

 Пример: В алфавите 256 символов (как в таблице ASCII).

256=28

Значит, каждый символ кодируется 8 битами (1 байтом).


4. Равномерные и неравномерные коды

Когда мы присваиваем символам двоичные коды, мы можем делать это двумя способами:
  1. Равномерные коды: Все символы кодируются одинаковым количеством битов.
    • Пример: В кодировке ASCII каждая буква занимает ровно 8 бит (A = 01000001, B = 01000010).
    • Плюс: Очень легко декодировать (читаешь по 8 бит и сразу знаешь символ).
    • Минус: Неэкономно. Буква «А», которая встречается в русском тексте очень часто, занимает столько же места, как и редкая буква «Ъ».
  2. Неравномерные коды: Частым символам присваиваются короткие коды, а редким — длинные.
    • Пример: Азбука Морзе (буква «Е» — это одна точка ·, а редкая «Щ» — — — · —). В компьютерах так работают алгоритмы сжатия (например, Хаффмана или ZIP).
    • Плюс: Экономия памяти и трафика.
    • Минус: Сложнее декодировать, можно легко ошибиться и «съехать» не на тот символ.

5. Условие Фано

Как же компьютеру понять, где заканчивается один символ и начинается другой в неравномерном коде, если между ними нет пробелов?
Для однозначного декодирования используется условие Фано (названо в честь американского учёного Роберта Фано).
  • Прямое условие Фано: Ни одно кодовое слово не должно быть началом (префиксом) другого кодового слова.
  • Обратное условие Фано: Ни одно кодовое слово не должно быть концом (суффиксом) другого кодового слова. (Используется, если декодировать сообщение справа налево).
Пример нарушения прямого условия Фано: Пусть А = 0, Б = 01, В = 11. Если мы получим сообщение 011, компьютер не поймёт, это Б + В (01 + 11) или А + А + В (0 + 0 + 11)? Декодирование неоднозначно!
Пример соблюдения условия: А = 0, Б = 10, В = 110, Г = 111. Здесь ни один код не является началом другого. Сообщение 010110 однозначно раскладывается только как А (0) + Б (10) + В (110).
(Важно: условие Фано является достаточным, но не обязательным для однозначного декодирования, однако в школьном курсе мы используем его как главный ориентир).

💻 Практические задания

Выполните эти задания в тетради или в текстовом редакторе, чтобы закрепить теорию.

Задание 1. «Данные, Информация или Знания?»

Определите, к какой категории относится каждое из следующих утверждений:
  1. Последовательность символов: «10110010 01001101».
  2. «Для кодирования 256 символов требуется 8 бит».
  3. «На улице идёт дождь, поэтому я возьму зонт».
  4. Число «42».

Задание 2. Расчёт информационной ёмкости

В некоторой стране автомобильный номер состоит из 6 символов. В качестве символов используются 10 цифр и 12 букв (всего 22 символа). Каждый символ кодируется одинаковым и минимально возможным количеством битов. Вопрос: Сколько битов потребуется для кодирования одного автомобильного номера? (Подсказка: найдите минимальное i, при котором 2i≥22, и умножьте на 6).

Задание 3. Проверка условия Фано и декодирование

Дан неравномерный двоичный код для букв А, Б, В, Г:
  • А = 00
  • Б = 01
  • В = 10
  • Г = 110
  1. Выполняется ли для этого кода прямое условие Фано? Объясните почему.
  2. Декодируйте следующее сообщение: 001011001.
  3. Попробуйте изменить код для буквы Г так, чтобы условие Фано нарушалось, и покажите, как возникнет неоднозначность при декодировании.

💡 Вопрос для размышления (Дискуссия)

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

seven × = thirty five

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: