16 статей
В велокроссе участвуют `130` спортсменов. Специальное устройство регистрирует прохождение каждым из участников промежуточного финиша, записывая его номер с использованием минимально возможного количества бит, одинакового для каждого спортсмена. Каков информационный объём сообщения, записанного устройством, после того как промежуточный финиш прошли `75` велосипедистов?
Первым делом нужно определить, сколько бит необходимо для кодирования `130` номеров спортсменов. Поскольку номера записываются в некотором устройстве, количество бит для кодирования каждого номера обязательно должно быть целым: `H=log_2 130`. После округления результата в большую сторону получим число `8`. Следовательно, для кодирования `1` номера необходим `1` байт. Таким образом, информационный объём сообщения, записанного устройством, составляет `75` байт.
В некоторой стране автомобильный номер состоит из `7` символов. В качестве символов используют `18` различных букв и десятичные цифры в любом порядке.
Каждый такой номер в компьютерной программе записывается минимально возможным и одинаковым целым количеством байтов, при этом используют посимвольное кодирование и все символы кодируются одинаковым и минимально возможным количеством битов.
Определите объём памяти, отводимый этой программой для записи `60` номеров.
Первое действие аналогично предыдущей задаче – нужно установить, каким количеством бит кодируется `1` символ. Всего используется `18` букв и `10` десятичных цифр, то есть `28` символов. По формуле Хартли `H=log_2 28`. После округления получается `5` бит на `1` символ. Вторым действием нужно узнать, какой объём памяти занимает `1` номер. Поскольку номер состоит из `7` символов, а каждый символ кодируется `5` битами, нам потребуется `35` бит памяти для хранения `1` номера. Однако по условию каждый номер должен записываться целым количеством байтов, а в каждом байте `8` бит. Ближайшее сверху к `35` число, делящееся на `8` – это число `40`, следовательно, на каждый номер отводится `5` байт. Таким образом, для записи `60` номеров программе потребуется `60*5 = 300` байт памяти.
Сигналы с судна на берег передают, используя различное положение рук. Каждая рука может быть поднята вверх, отведена в сторону или опущена вниз. Сколько различных сигналов можно подать двумя руками, если важно то, какая рука была в каком положении, но обе руки могут находиться и в одинаковом положении?
Главная ловушка этой задачи заключается в следующем неверном ходе мыслей: «Раз одной рукой передаётся `3` сигнала, значит, двумя в `2` раза больше, то есть `6`». На самом деле число исходов с добавлением новой руки увеличивается в `3` раза, поскольку можно продублировать все положения первой руки для каждого из `3` возможных положений второй. Таким образом, в ответе получается `9` сигналов.
В течение `5` секунд было передано сообщение, объём ко-торого составил `375` байт. Каков размер алфавита, с помощью кото-рого записано сообщение, если скорость его передачи составила `200` символов в секунду?
Первым делом найдём скорость передачи этого сообщения: `375//5 = 75` байт в секунду. Далее, нам известно, что в секунду передавалось `200` символов, которые занимают `75` байт памяти. Поэтому следующим действием найдём объём памяти, отводимый под `1` символ, переведя ответ в биты (ибо уже из входных чисел очевидно, что под каждый символ отводится менее `1` байта): `75^(**)8//200 = 600//200 = 3`. Таким образом, под каждый символ отводится `3` бита.
Применяя формулу Хартли, находим, что алфавит состоит из `8` символов.
Информация является одним из фундаментальных понятий современной науки наряду с такими понятиями, как «вещество» и «энергия».
Общее определение этому термину дать невозможно. Однако в раз-личных предметных областях даётся специализированное определение информации, подходящее для данной предметной области. В рамках этого задания мы будем говорить о математической теории информации и рассмотрим два подхода - содержательный (Клод Шеннон) и алфавитный (А.Н.Колмогоров). Начнём с определения понятия «инфор-мация» в каждом из этих подходов.
В содержательном подходе, информация - это снятая неопределённость. Неопределённость некоторого события - это количество возможных результатов (исходов) данного события.
Например, если мы подбрасываем вверх монету, то она может упасть двумя различными способами (орлом вверх или решкой вверх). Соответственно, у данного события два возможных исхода. Если же подбрасывать игральный кубик, то исходов будет шесть.
В алфавитном подходе информация - это сообщение (последовательность символов некоторого алфавита). Причём существенными являются только размер алфавита и количество символов в сообщении. Конкретное содержание сообщения интереса не представляет. Чаще всего алфавит является двоичным (состоит из `2` символов – «`0`» и «`1`»).
После таких определений понятия «информация» можно говорить об её измерении. Введём несколько основных единиц измерения информации.
Чаще всего в качестве основной единицы измерения информации используется бит. При алфавитном подходе один бит - это количество информации, которое можно передать в сообщении, состоящем из одного двоичного знака (`«0»` или `«1»`). С точки же зрения содержательного подхода один бит - это количество информации, уменьшающее неопределённость знания в два раза.
Наряду с битами можно использовать и другие единицы измерения информации, например, триты или диты. При алфавитном подходе один трит - это количество информации, которое можно передать в сообщении, состоящем из одного троичного знака `(«0»`, `«1»` или `«2»)`. С точки же зрения содержательного подхода один трит - это количество информации, уменьшающее неопределённость знания в три раза. Соответственно, один дит - это количество информации, уменьшаю-щее неопределённость знания в десять раз, и количество информации, которое можно передать в сообщении, состоящем из одного десятичного знака (арабской цифры). В некоторых задачах (например, в задаче взлома кодового замка) удобнее в качестве основной единицы измерения информации использовать не биты, а диты, поскольку угадывание каждой цифры из кода уменьшает количество комбинаций в `10` раз.
Для каждой основной единицы измерения информации существуют производные более крупные единицы измерения. Поскольку чаще всего мы будем использовать в качестве основной единицы бит, рассмотрим производные единицы измерения для бита. На практике чаще всего используется не бит, а байт.
`1` байт (`1`B) `= 8` бит;
Далее существует две линейки производных единиц для байта – линейка десятичных приставок и линейка двоичных приставок. В случае десятичных приставок каждая следующая единица измерения равна `1000` предыдущих единиц. Обозначаются десятичные приставки латинскими буквами (буква префикса из системы СИ и заглавная «B», обозначающая «байт») Итак:
`1` килобайт (`1` kB) `= 1000` B (1000 байт);
`1` мегабайт (`1` MB) `= 1000` kB ;
`1` гигабайт (`1` GB) `= 1000` MB;
`1` терабайт (`1` TB) `= 1000` GB;
`1` петабайт (`1` PB) `= 1000` TB;
`1` эксабайт (`1` EB) `= 1000` PB;
`1` зеттабайт (`1` ZB) `= 1000` EB;
`1` йоттабайт(`1` YB) `= 1000` ZB.
Более крупных единиц на настоящий момент не введено.
При использовании двоичных приставок, каждая следующая едини-ца измерения равна 1024 предыдущих единиц. В России принято обозначать двоичные приставки, записывая префикс заглавной русской буквой и после него слово «байт» целиком и тоже русскими буквами. За рубежом для обозначения двоичных приставок между префиксом и «B» добавляется маленькая буква «i» (от слова «binary»). Кроме того, все префиксы записываются заглавными буквами. Итак:
`1` кибибайт (`1` Кбайт, `1` KiB) `=2^10` байт `= 1024` байт;
`1` мебибайт (`1` Мбайт, `1` MiB) `=2^20` байт `= 1024` Кбайт;
1 гибибайт (`1` Гбайт, `1` GiB) `=2^30` байт `= 1024` Мбайт;
1 тебибайт (`1` Тбайт, `1` TiB) `=2^40` байт `= 1024` Гбайт;
1 пебибайт (`1` Пбайт, `1` PiB) `=2^50` байт `= 1024` Тбайт;
1 эксбибайт (`1` Эбайт, `1`EiB) `=2^60` байт `= 1024` Пбайт;
1 зебибайт (`1` Збайт, `1` ZiB) `=2^70` байт `= 1024` Эбайт;
1 йобибайт (`1` Йбайт, `1` YiB) `=2^80` байт `= 1024` Збайт.
Как уже упоминалось выше, в качестве основной единицы измерения информации мы будем использовать бит. Соответственно, с точки зрения алфавитного подхода мы будем кодировать информацию при помощи нулей и единиц (двоичных знаков).
Для того чтобы измерить количество информации в сообщении, надо закодировать сообщение в виде последовательности нулей и единиц наиболее рациональным способом, позволяющим получить самую короткую последовательность. Длина полученной последовательности нулей и единиц и является мерой количества информации в битах.
Поставим себе одну из наиболее часто встречающихся задач в теории информации. Пусть у нас есть `N` возможных равновероятных вариантов исходов некоторого события. Какое количество информации нам нужно получить, чтобы оставить только один вариант?
Например, пусть мы знаем, что некоторая интересная для нас книга находится на одной из полок нашего книжного шкафа, в котором `8` полок. Какое количество информации нам нужно получить, чтобы однозначно узнать полку, на которой находится книга?
Решим эту задачу с точки зрения содержательного и алфавитного подходов. Поскольку изначально в шкафу было `8` полок, а в итоге мы выберем одну, следовательно, неопределённость знания о местоположении книги уменьшится в `8` раз. Мы говорили, что один бит – это количество информации, уменьшающее неопределённость знания в `2` раза. Следовательно, мы должны получить `3` бита информации.
Теперь попробуем использовать алфавитный подход. Закодируем номера всех полок при помощи `0` и `1`. Получим следующие номера: `000, 001, 010, 011, 100, 101, 110, 111`. Для того чтобы узнать, на какой полке находится книга, мы должны узнать номер этой полки. Каждый номер состоит из `3` двоичных знаков. А по определению, `1` бит (в алфавитном подходе) – это количество информации в сообщении, состоящем из `1` двоичного знака. То есть мы тоже получим `3` бита информации.
Прежде чем продолжить рассмотрение поставленной общей задачи введём важное математическое определение.
Назовём логарифмом числа `N` по основанию `a` такое число `X`, что Обозначение:
`X=log_aN`.
На параметры логарифма налагаются некоторые ограничения. Число `N` обязательно должно быть строго больше `0`. Число `a` (основание логарифма) должно быть также строго больше нуля и при этом не равняться единице (ибо при возведении единицы в любую степень получается единица).
Теперь вернёмся к нашей задаче. Итак, какое же количество информации нам нужно получить, чтобы выбрать один исход из `N` равновероятных? Ответ на этот вопрос даёт формула Хартли: `H=log_aN`, где `N` – это количество исходов, а `H` – количество информации, которое нужно получить для однозначного выбора `1` исхода. Основание логарифма обозначает единицу измерения количества информации. То есть если мы будем измерять количество информации в битах, то логарифм нужно брать по основанию `2`, а если основной единицей измерения станет трит, то, соответственно, логарифм берётся по основанию `3`.
Рассмотрим несколько примеров применения формулы Хартли.
В библиотеке `16` стеллажей, в каждом стеллаже `8` полок. Какое количество информации несёт сообщение о том, что нужная книга находится на четвёртой полке?
Решим эту задачу с точки зрения содержательного подхода. В переданном нам сообщении указан только номер полки, но не указан номер стеллажа. Таким образом, устранилась неопределённость, связанная с полкой, а стеллаж, на котором находится книга, мы всё ещё не знаем. Так как известно, что в каждом стеллаже по `8` полок, следовательно, неопределённость уменьшилась в `8` раз. Следовательно, количество информации можно вычислить по формуле Хартли `H=log_2 8=3` бита информации.
Имеется `27` монет, одна из которых фальшивая и легче всех остальных. Сколько потребуется взвешиваний на двухчашечных весах, чтобы однозначно найти фальшивую монету?
В этой задаче неудобно использовать бит в качестве основной единицы измерения информации. Двухчашечные весы могут принимать три положения: левая чаша перевесила, значит, фальшивая монета находится в правой; правая чаша перевесила, значит, монета находится в левой; или же весы оказались в равновесии, что означает отсутствие фальшивой монеты на весах. Таким образом, одно взвешивание может уменьшить неопределённость в три раза, следовательно, будем использовать в качестве основной единицы измерения количес-тва информации трит.
По формуле Хартли `H = log _3 27 = 3` трита. Таким образом, мы видим, что для того чтобы найти фальшивую монету среди остальных, нам потребуется три взвешивания.
Логарифмы обладают очень важным свойством: `log_a(X*Y)=log_aX+log_aY`.
Если переформулировать это свойство в терминах количества информации, то мы получим закон аддитивности информации: Коли-чество информации`H(x_1, x_2)`, необходимое для установления пары `(x_1, x_2)`, равно сумме количеств информации `H(x_1)` и `H(x_2)`, необходимых для независимого установления элементов `x_1` и `x_2`:
`H(x_1,x_2)=H(x_1)+H(x_2)`.
Проиллюстрируем этот закон на примере. Пусть у нас есть игральная кость в форме октаэдра (с `8` гранями) и монета. И мы одновременно подбрасываем их вверх. Нужно узнать, какое количество информации несёт сообщение о верхней стороне монеты после падения (орёл или решка) и числе, выпавшему на игральной кости.
Игральная кость может упасть `8` различными способами, следовательно, по формуле Хартли можно вычислить, что, определив число, выпавшее на игральной кости, мы получаем `3` бита информации. Соответственно, монета может упасть только `2` способами и несёт в себе `1` бит информации. По закону аддитивности информации мы можем сложить полученные результаты и узнать, что интересующее нас сообщение несёт `4` бита информации.
Рассмотрим другой способ решения этой задачи. Если мы сразу рассмотрим все возможные исходы падения `2` предметов, то их будет `16` (кость выпадает `8` способами, а монета - орлом вверх, и кость выпадает `8` способами, а монета - решкой вверх). По формуле Хартли находим, что интересующее нас сообщение несёт `4` бита информации.
Если в результате вычислений по формуле Хартли получилось нецелое число, а в задаче требуется указать целое число бит, то результат следует округлить в большую сторону.
Всякий текст состоит из символов - букв, цифр, знаков препинания и т. д., - которые человек различает по начертанию. Однако для компьютерного представления текстовой информации такой метод неудобен, а для компьютерной обработки текстов - и вовсе неприемлем. Используется другой способ: все символы кодируются числами, и текст представляется в виде набора чисел - кодов символов, его составляющих. При выводе текста на экран монитора или принтер необходимо восстановить изображения всех символов, составляющих данный текст. Для этого используются кодовые таблицы символов, в которых для каждого символа устанавливается соответствие между его кодом и изображением. Все кодовые таблицы, используемые в любых компьютерах и любых операционных системах, подчиняются международным стандартам кодирования символов.
Основой для компьютерных стандартов кодирования символов послужил ASCII (American Standard Code for Information Interchange) - американский стандартный код для обмена информацией, разработанный в 1960-х годах и применяемый в США для любых видов передачи информации. В нём используется `7`-битное кодирование: общее количество символов составляет `2^7=128`, из них первые `32` символа - «управляющие», а остальные - «изображаемые», т. е. имеющие графическое изображение. Управляющие символы должны восприниматься устройством вывода текста как команды, например:
Cимвол |
Действие |
Английское название |
№7 |
Подача стандартного звукового сигнала |
Beep |
№8 |
Затереть предыдущий символ |
Back Space (BS) |
№13 |
Перевод строки |
Line Feed (LF) |
№26 |
Конец текстового файла |
End Of File (EOF) |
№27 |
Отмена предыдущего ввода |
Escape (ESC) |
К изображаемым символам в ASCII относятся буквы английского (латинского) алфавита (заглавные и прописные), цифры, знаки препинания и арифметических операций, скобки и некоторые специальные символы. Фрагмент кодировки ASCII приведён в таблице.
Символ |
Десятичный код |
Двоичный код |
Символ |
Десятичный код |
Двоичный код |
Пробел |
`32` |
`00100000` |
`0` |
`48` |
`00110000` |
`!` |
`33` |
`00100001` |
`1` |
`49` |
`00110001` |
# |
`35` |
`00100011` |
`2` |
`50` |
`00110010` |
$ |
`36` |
`00100100` |
`3` |
`51` |
`00110011` |
`**` |
`42` |
`00101010` |
`4` |
`52` |
`00110100` |
`+` |
`43` |
00101011 |
5 |
53 |
`00110101` |
, |
`44` |
`00101100` |
`6` |
`54` |
`00110110` |
`–` |
`45` |
`00101101` |
`7` |
`55` |
`00110111` |
. |
`46` |
`00101110` |
`8` |
`56` |
`00111000` |
/ |
`47` |
`00101111` |
`9` |
`57` |
`00111001` |
`A` |
`65` |
`01000001` |
`N` |
`78` |
`01001110` |
`B` |
`66` |
`01000010` |
`O` |
`79` |
`01001111` |
`C` |
`67` |
`01000011` |
`P` |
`80` |
`01010000` |
`D` |
`68` |
`01000100` |
`Q` |
`81` |
`01010001` |
`E` |
`69` |
`01000101` |
`R` |
`82` |
`01010010` |
`F` |
`70` |
`01000110` |
`S` |
`83` |
`01010011` |
`G` |
`71` |
`01000111` |
`T` |
`84` |
`01010100` |
`H` |
`72` |
`01001000` |
`U` |
`85` |
`01010101` |
`I` |
`73` |
`01001001` |
`V` |
`86` |
`01010110` |
`J` |
`74` |
`01001010` |
`W` |
`87` |
`01010111` |
`K` |
`75` |
`01001011` |
`X` |
`88` |
`01011000` |
`L` |
`76` |
`01001100` |
`Y` |
`89` |
`01011001` |
`M` |
`77` |
`01001101` |
`Z` |
`90` |
`01011010` |
Хотя в ASCII символы кодируются `7`-ю битами, в памяти компьютера под каждый символ отводится ровно `1` байт (`8` бит). И получается, что один бит из каждого байта не используется.
Главный недостаток стандарта ASCII заключается в том, что он рассчитан на передачу только текста, состоящего из английских букв. Со временем возникла необходимость кодирования и неанглийских букв. Во многих странах для этого стали разрабатывать расширения ASCII-кодировки, в которых применялись однобайтные коды символов; при этом первые `128` символов кодовой таблицы совпадали с кодировкой ASCII, а остальные (со `128`-го по `255`-й) использовались для кодирования букв национального алфавита, символов национальной валюты и т. п. Из-за несогласованности этих разработок для многих языков было создано по нескольку вариантов кодовых таблиц (например, для русского языка их около десятка).
Впоследствии использование кодовых таблиц было несколько упорядочено: каждой кодовой таблице было присвоено особое название и номер. Указав кодовую таблицу, автоматически выбирают и язык, которым можно пользоваться в дополнение к английскому; точнее, выбирается то, как будут интерпретироваться символы с кодами более `127`.
Для русского языка наиболее распространёнными являются однобайтовые кодовые таблицы СР-`866`, Windows-`1251`, ISO `8859-5` и КОИ-`8`. В них первые `128` символов совпадают с ASCII-кодировкой, а русские буквы помещены во второй части таблицы (с номерами `128-255`), однако коды русских букв в этих кодировках различны! Сравните, например, кодировки КОИ-`8` (Код Обмена Информацией `8`-битный, международное название «koi-`8`r») и Windows-`1251`, фрагменты которых приведены в таблицах на странице `13`.
Несовпадение кодовых таблиц приводит к ряду неприятных эффектов: один и тот же текст (неанглийский) имеет различное компьютерное представление в разных кодировках, соответственно, текст, набранный в одной кодировке, будет нечитабельным в другой!
Однобайтовые кодировки обладают одним серьёзным ограничением: количество различных кодов символов в отдельно взятой кодировке недостаточно велико, чтобы можно было пользоваться одновременно несколькими языками. Для устранения этого ограничения в 1993-м году был разработан новый стандарт кодирования символов, получивший название Unicode, который, по замыслу его разработчиков, позволил бы использовать в текстах любые символы всех языков мира.
В Unicode на кодирование символов отводится `32` бита. Первые `128` символов (коды `0-127`) совпадают с таблицей ASCII, все основные алфавиты современных языков полностью умещаются в первые `65536` кодов (`65536=2^16`), а в целом стандарт Unicode описывает все алфавиты современных и мёртвых языков; для языков, имеющих несколько алфавитов или вариантов написания (например, японский и индийский), закодированы все варианты; внесены все математические и иные научные символьные обозначения, и даже - некоторые придуманные языки (например, письменности эльфов и Мордора из эпических произведений Дж.Р.Р. Толкиена). Потенциальная информационная ёмкость Unicode столь велика, что сейчас используется менее одной тысячной части возможных кодов символов!
В современных компьютерах и операционных системах используется укороченная, `16`-битная версия Unicode, в которую входят все современные алфавиты; эта часть Unicode называется базовой многоязыковой страницей (Base Multilingual Plane, BMP).
`I=8000*16*128=1384000` бит `I=8000*16*128//8=2048000` байт `I=8000*16*128//8//1024=2000` Кбайт `I=8000*16*128//8//1024//1024~~1,95` Мбайт |
`1` мин `= 60` сек `~~64` сек `= 2^6` сек
`1000~~1024=2^(10)`
Итак, объём музыкального файла вычисляется по формуле
`I=f*r*k*t`,
где `f` – частота дискретизации, `r` – разрешение (глубина кодирования), `k` – количество каналов, `t` – время звучания.