1. Введение

Здравствуйте, ребята. Сегодня наш урок, как я и обещал, будет посвящён измерению информационного объёма текста. Хотя компьютеры изначально создавались для быстрого счёта, в частности, для быстрого решения уравнений, и предполагали работу с числовой информацией, в 60-х годах прошлого века увидели свет первые текстовые редакторы. Каким же образом компьютеры, нацеленные на обработку числовой информации, вдруг оказались способны обрабатывать текст? Давайте разберёмся с этим вопросом!

2. Наборы символов (кодировки)

В наше время для представления текста в компьютере используются различные наборы символов или, как их ещё называют, таблицы кодировок. Будем употреблять слова «набор символов» и «кодировка» как синонимы. Представьте себе таблицу, имеющую два столбца – символ и его код. В такой таблице каждому символу задано однозначное соответствие в виде числа, с помощью которого этот символ представляется в памяти компьютера.

3. Формула Хартли

Для кодирования одного символа в наборе символов может потребоваться различное количество бит, которое зависит от количества символов в наборе. Чем больше различных символов будет в наборе, тем большее количество бит нам для этого потребуется. Представьте себе, что мы должны закодировать два символа. Как вы думаете, сколько бит для одного символа потребуется? Естественно, 1 бит: первый символ мы будем кодировать, например, нулём, а второй – единицей. Если нам потребуется закодировать 3 или 4 различных символа, то одним битом на символ мы не обойдёмся, нужно два бита, которые могут находиться в таких состояниях: 00, 01, 10, 11. Если потребуется закодировать 4 разных символа, то каждому из рассмотренных состояний мы поставим в соответствие определённый символ, а если потребуется закодировать 3 символа, то одно состояние окажется не использовано. 3 бита на символ позволят нам закодировать уже до 8 символов, 4 бита – до 16 различных символов. Примеры вы сейчас видите на экране.

Я думаю, что вы наверняка заметили закономерность: 1 бит позволяет нам придумать коды для 2 символов, 2 бита – для 4 символов, 3 бита – для 8 символов, а 4 – для 16. С возрастанием количества бит на единицу каждый раз мы сможем закодировать в 2 раза больше символов! Эту закономерность выразил в виде формулы  американский учёный Ральф Винтон Лайон Хартли:

N = 2I

Вы сейчас видите формулу, известную как формула Хартли. Переводя наши примеры с количеством символов и соответствующим количеством бит на язык математики, буква N в формуле обозначает количество символов, а I – количество бит, используемых для представления одного символа. Справа от знака равенства вы видите запись, которая читается как «два в степени I». Эта запись означает, что нужно перемножить количество двоек, равное I, друг на друга.

При 1 бите на символ можно закодировать 2 символа: N = 21 = 2

При 2 битах на символ можно закодировать 4 символа: N = 22 = 2*2 = 4

При 8 битах на символ можно закодировать 256 символов: N = 28 = 2*2*2*2*2*2*2*2 = 256

Так, имея один бит на символ, получим количество символов, равное двум, а имея 8 бит на символ (как вы помните, это 1 байт), получим возможность закодировать целых 256 различных символов!

Применение формулы Хартли не ограничивается вычислением объёма информации для одного символа из набора. На прошлом уроке мы останавливались на вопросах кодирования растровых изображений в памяти компьютера и рассматривали пиксели изображения в оттенках серого. Чем светлее был пиксель, тем ближе было его значение к 255. И наоборот: чем больше значение пикселя приближалось к 0, тем темнее становился пиксель, приближаясь к чёрному цвету. От 0 до 255 включительно 256 целых значений, и, применяя формулу Хартли, можно установить, что для кодирования цвета одного пикселя потребуется один байт или 8 бит.

256 = 2I –> I = 8

Когда пиксель принимает одно из 256 различных значений, говорят, что он находится в одном из 256 состояний. В общем случае N в формуле Хартли означает количество состояний системы, в которых система пребывает с равной вероятностью, или количество различных сообщений о состоянии системы. I означает количество информации, необходимое для кодирования одного состояния или одного сообщения.

4. Различные наборы символов

Для кодирования текста используются различные наборы символов. Примеры кодировок – ASCII (читается как «эски» или «аски»), КОИ-8 и современный Unicode. ASCII и КОИ представляют аббревиатуры, эти слова были получены из первых букв других слов. ASCII – это аббревиатура от American Standard Code for Information Interchange, что переводится как «Американский стандартный код для обмена информацией». Аббревиатура КОИ образована от слов «Код обмена информацией». Первые два набора символов, первые две кодировки в настоящее время – однобайтовые. Это означает, что может использоваться только один байт на символ, и, соответственно, с помощью формулы Хартли мы можем вычислить количество символов в этих наборах или кодировках. В кодировках ASCII и КОИ их всего 256. Изначально многие кодировки были 7-битными, и это означало, что могло быть закодировано только 128 различных символов. В эти 128 символов входили прописные и строчные символы английского алфавита, цифры, специальные и управляющие символы. Обратите особое внимание, что и пробел, табуляция и перевод строки – это тоже символы, и они также требуют места в памяти компьютера. Посмотрите на примеры символов и их ASCII-кодов в таблице.

Символ

Десятичный код ASCII

Управляющий символ Esc

27

Пробел

32

Прописная латинская буква A

65

Строчная латинская буква a

97

Специальный символ ~ (тильда)

126

Прописная русская буква А

192

Строчная русская буква а

224

Несомненно, наборов символов гораздо больше, но разница между ними заключается лишь в количестве бит для кодирования одного символа и в соответствии символов и их кодов. Из-за того, что в разных кодировках одному и тому же символу ставятся в соответствие различные числа,  в Рунете, российском сегменте глобальной сети Интернет, в 90-е годы один и тот же сайт мог быть представлен сразу в трёх кодировках. На главной странице таких сайтов пользователь сначала выбирал операционную систему, от которой зависела используемая кодировка, и только затем мог просматривать страницы сайта. Если вы вдруг выберете неверную кодировку, то рискуете не прочитать текст, расположенный на таком сайте. Для борьбы с этой проблемой, а вы понимаете, что это было действительно неудобно, была придумана многобайтовая кодировка под названием Unicode. Создатели Unicode пишут, что Unicode – это уникальный код для любого символа, независимо от платформы, независимо от программы, независимо от языка. Поскольку 1 байт, с помощью которого можно представить только 256 различных символов, слишком мал для представления «любого символа», как нам обещают создатели обсуждаемой кодировки, Unicode – это кодировка многобайтная, один символ в ней может занимать от 1 до 6 байт.

5. Примеры вычисления информационного объёма текста

В качестве примера рассмотрим следующую задачу:

Вычислим информационный объём следующих предложений, записанных в кодировке ASCII, в которой каждый символ занимает 1 байт. В качестве предложений возьмём цитату Стива Джобса, одного из основателей компании Apple:

Моя работа — не облегчать жизнь людям. Моя работа — делать их лучше.

Ответ выразим как в байтах, так и в битах.

Итак, приступим к решению этой задачи. Я дважды пересчитал все символы в двух предложениях, включая пробелы, тире и точки. Всего у меня получилось 68 символов. Когда я заставил программу «Notepad++» вычислить количество символов, у неё получился такой же результат. Если вдруг у вас получился другой результат, то обратите внимание, что перед и после тире стоят пробелы. Также пробелы принято ставить после знаков препинания: точек, запятых, точек с запятыми, двоеточий, восклицательных и вопросительных знаков. Поскольку используется кодировка ASCII, один символ кодируется одним байтом, а это значит, что для кодирования 68 символов нам потребуется 68 байт. Это число и будет ответом, выраженным в байтах. Умножьте 68 на 8, и вы получите ответ, выраженный в битах.

Рассмотрим следующую задачу:

Текст рассказа, набранного на компьютере, занимает 8 страниц. На каждой странице расположено 16 строк, в каждой строке – 32 символа. Была использована кодировка Unicode, в одном из представлений которой 1 символ занимает 2 байта. Определите информационный объём данного текста. Ответ выразите в Килобайтах.

Для ответа на поставленный вопрос перемножим количество символов в строке на количество строк на странице, в результате получим количество символов на одной странице. Умножим 32 на 16, получим 512 символов на одной странице. Всего имеем 8 страниц. Умножив количество символов на одной странице на количество страниц, получим общее количество символов в рассказе. Умножим 512 на 8, получим 4096 символов во всём рассказе. В нашей задаче один символ занимает 2 байта, поэтому, умножив количество символов в рассказе на 2, получим информационный объём рассказа в байтах. У нас получится 8192 байта. Ответ надо выразить в Килобайтах, поэтому, вспоминая изученное на первом уроке, 8192 байта нужно разделить на 1024. В качестве ответа получим 8 Килобайт.

Домашнее задание

Дома запишите любимую цитату любимого автора (возможно, это цитата из прозы или из фильма) и вычислите её информационный объём в кодировке ASCII, где один символ занимает один байт, и в одном из представлений Unicode, в котором один символ занимает 2 байта. Также выучите формулу Хартли и составьте собственную задачу, используя эту формулу.