ЕГЭ · Информатика · Измерение информации: текст, графика, звук (задания 7 и 11)
Объём текста: алфавитный подход, ASCII, Unicode, UTF-8
Как посчитать вес текста в битах, байтах и Кбайтах: алфавитный подход, формула i = ⌈log₂ N⌉, различия ASCII, UTF-16 и UTF-8 и обратные задачи «найди мощность алфавита».
🎯 ЕГЭ информатика: этот урок закрывает задание(я) 11 — объём текстового сообщения и мощность алфавита. Основа темы — алфавитный подход: вес символа зависит только от размера алфавита, а не от смысла сообщения.
- ⚠Путают биты и байты: делят на 8 не там, где нужно
- ⚠Округляют i = log₂N вниз: если алфавит 300 символов, нужно 9 бит, а не 8
- ⚠Переводят байты в Кбайты делением на 1000 вместо 1024
- ⚠Забывают, что в тексте считаются все символы, включая пробелы и знаки препинания
- ⚠В UTF-8 считают все символы одинаковыми: латиница там 1 байт, кириллица 2 байта
Алфавитный подход: сколько весит один символ
Определение
Алфавитный (объёмный) подход — способ измерения информации, который смотрит не на смысл, а только на мощность алфавита N — число различных символов, из которых составлено сообщение. Каждому символу нужно отвести i = ⌈log₂ N⌉ бит, где скобки означают округление вверх: половины разряда не бывает. Объём текста из K символов равен V = K · i бит. Слова «минимально возможный объём» в условии — прямое указание брать наименьшее подходящее i.
| N ≤ 2 → i = 1 | два символа (например, 0 и 1) — 1 бит |
|---|---|
| N ≤ 16 → i = 4 | 16 = 2⁴; алфавит из 10 цифр тоже уложится в 4 бита |
| N ≤ 64 → i = 6 | 64 = 2⁶: типичный «русский алфавит с пробелом и знаками» |
| N ≤ 128 → i = 7 | 128 = 2⁷ — исходная таблица ASCII |
| N ≤ 256 → i = 8 | 256 = 2⁸ = 1 байт: расширенные однобайтные кодировки |
| N = 300 → i = 9 | 2⁸ = 256 мало, 2⁹ = 512 хватает. Округляем вверх |
| N ≤ 65 536 → i = 16 | 2¹⁶ = 65 536 = 2 байта: базовый диапазон Unicode |
| ASCII | исходно 7 бит на символ (128 позиций: латиница, цифры, знаки); в расширенном виде — 1 байт и 256 символов |
|---|---|
| Однобайтные кириллические | Windows-1251, КОИ-8: по 1 байту на символ, 256 позиций, кириллица занимает верхнюю половину таблицы |
| Unicode / UTF-16 | 2 байта (16 бит) на символ в базовом диапазоне; удобно для задач, потому что объём считается умножением на 2 |
| UTF-32 | 4 байта на любой символ — простая, но расточительная схема |
| UTF-8 | переменная длина: латиница, цифры и знаки — 1 байт, кириллица и большинство европейских алфавитов — 2 байта, иероглифы — 3, редкие символы и эмодзи — 4 |
| Почему UTF-8 победил | он совместим с ASCII: текст без кириллицы в UTF-8 байт в байт совпадает с ASCII-текстом и не «раздувается» вдвое |
Держи в голове степени двойки: 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096. Почти каждое задание 7 сводится к поиску ближайшей сверху степени двойки: к числу символов алфавита, к числу цветов палитры или к числу различных состояний. И помни цепочку перевода: бит → байт (÷8) → Кбайт (÷1024) → Мбайт (÷1024).
Разбор примера
Прямая задача: объём текста в двухбайтной кодировке
Статья содержит 3072 символа, каждый символ кодируется двумя байтами. Сколько Кбайт занимает статья?
Показать решение по шагам
- 1. Шаг 1. Вес одного символа задан прямо: 2 байта (16 бит). Логарифм считать не нужно.
- 2. Шаг 2. Объём всего текста в байтах: 3072 · 2 = 6144 байта.
- 3. Шаг 3. Переводим в Кбайты: 6144 / 1024 = 6 Кбайт.
- 4. Проверка: 1 Кбайт вмещает 1024 байта, то есть 512 двухбайтных символов; 3072 / 512 = 6 ✔
Ответ: 6 Кбайт
Разбор примера
Обратная задача: найти мощность алфавита
Сообщение занимает 1,5 Кбайт и содержит 3072 символа. Какова минимально возможная мощность алфавита, которым записано сообщение?
Показать решение по шагам
- 1. Шаг 1. Приводим объём к битам: 1,5 Кбайт = 1,5 · 1024 = 1536 байт; 1536 · 8 = 12 288 бит.
- 2. Шаг 2. Находим вес одного символа: i = V / K = 12 288 / 3072 = 4 бита.
- 3. Шаг 3. Из формулы i = log₂ N получаем N = 2ⁱ = 2⁴ = 16 символов.
- 4. Шаг 4. Проверяем разумность: алфавит из 16 символов — это, например, 10 цифр и 6 букв. Правдоподобно ✔
- 5. Обрати внимание на порядок действий: сначала всё в биты, потом деление на число символов, и только затем возведение двойки в степень. Если пропустить перевод в биты, ответ окажется в 8 раз меньше.
Ответ: 16 символов
Почему кодировок было много и чем это грозило
Стандарт ASCII (1963) занимал 7 бит и описывал 128 символов — латиницу, цифры, знаки препинания и управляющие коды. Русских букв там не было, и каждая страна решала проблему сама, занимая вторую половину восьмибитной таблицы под свой алфавит.
Для русского языка таких решений оказалось сразу несколько: КОИ-8, Windows-1251, CP866, ISO 8859-5, а на компьютерах Apple — своя. Все они отводили на символ один байт и различались только тем, какой букве какой код достался.
Следствие известно всем, кто застал девяностые: текст, набранный в одной кодировке и открытый в другой, превращался в нечитаемый набор знаков. Байты оставались теми же — менялась таблица, по которой их толковали. Отсюда важный вывод для курса: байты сами по себе не содержат сведений о том, как их читать, и кодировка — это внешнее соглашение, а не свойство данных.
Unicode устранил причину: он даёт единую нумерацию символов всех письменностей. В UTF-8 — самой распространённой форме записи Unicode — латинские буквы занимают 1 байт и совпадают с ASCII, кириллица 2 байта, многие иероглифы 3 байта.
Что это значит для задач. Если в условии сказано «в кодировке UTF-8», нельзя умножать число символов на одно и то же число байт: считать надо по типам символов. Русский текст из 1000 букв займёт 2000 байт, а такой же по длине английский — 1000 байт. Задания последних лет этим пользуются намеренно: в одном сообщении смешивают латиницу, кириллицу, цифры и пробелы, и требуется аккуратно разнести символы по группам.
Вопрос на проверку
Сколько бит нужно на один символ алфавита из 300 символов при минимальном кодировании?
Ответить и проверить себя — после бесплатной регистрации.
Вопрос на проверку
Текст из 512 символов закодировали, потратив 640 байт. Сколько бит ушло на один символ?
Ответить и проверить себя — после бесплатной регистрации.
Вопрос на проверку
Как в кодировке UTF-8 кодируется русская буква?
Ответить и проверить себя — после бесплатной регистрации.
Вопрос на проверку
Сообщение записано алфавитом из 64 символов. Сколько байт займут 1024 символа такого сообщения?
Ответить и проверить себя — после бесплатной регистрации.
Разбор примера
UTF-8: текст из символов разного веса
Текст содержит 200 русских букв и 300 латинских букв и цифр. Определите объём текста в кодировке UTF-8.
Показать решение по шагам
- 1. Шаг 1. Главное свойство UTF-8: вес символа не одинаков. Латинские буквы, цифры и знаки препинания занимают 1 байт, кириллица — 2 байта, а иероглифы и многие символы — 3 или 4 байта.
- 2. Шаг 2. Именно этим UTF-8 отличается от кодировок с фиксированной длиной. В ASCII любой символ занимает 1 байт, но кириллицы там нет вовсе; в UTF-16 любой символ занимает 2 байта, включая латиницу, — для английского текста это вдвое расточительнее.
- 3. Шаг 3. Считаем русские буквы: 200 · 2 = 400 байт.
- 4. Шаг 4. Считаем латинские буквы и цифры: 300 · 1 = 300 байт.
- 5. Шаг 5. Складываем: 400 + 300 = 700 байт.
- 6. Шаг 6. Сравним с другими кодировками. В UTF-16 весь текст занял бы 500 · 2 = 1000 байт. В однобайтной кодировке вроде Windows-1251 — 500 · 1 = 500 байт, но такая кодировка вмещает только 256 символов и не может хранить, скажем, греческий алфавит вместе с кириллицей.
- 7. Шаг 7. Отсюда и практический вывод, который любят проверять: для текста преимущественно на латинице UTF-8 экономнее UTF-16, для текста на кириллице — они примерно равны, а для иероглифов UTF-8 даже расточительнее.
- 8. Шаг 8. Типичная ошибка этого типа задач — умножить общее число символов на средний вес. Так делать нельзя: считать надо по группам и складывать. При 200 русских и 300 латинских «средний вес 1,5 байта» дал бы 750 байт вместо 700.
- 9. Шаг 9. И ещё одна деталь: в объём текста обычно не включают служебные символы вроде перевода строки, если условие о них не говорит. Если же сказано «текст состоит из 20 строк по 40 символов», перевод строки может учитываться отдельно — читайте формулировку.
Ответ: 700 байт
Разбор примера
Обратная задача: найти мощность алфавита по объёму
Текст из 1024 символов занял 1,125 Кбайта. Все символы кодируются одинаковым и минимально возможным числом бит. Какова наибольшая возможная мощность алфавита?
Показать решение по шагам
- 1. Шаг 1. Переводим объём в биты. 1,125 Кбайта — это 1,125 · 1024 = 1152 байта, а в битах 1152 · 8 = 9216 бит.
- 2. Шаг 2. Делим на число символов: 9216 : 1024 = 9 бит на символ. Деление сошлось нацело — это хороший признак: в задачах алфавитного подхода вес символа всегда целый.
- 3. Шаг 3. Мощность алфавита: девять бит дают 2⁹ = 512 различных кодов, и столько же может быть символов.
- 4. Шаг 4. Почему «наибольшая возможная». Девяти бит хватит и на алфавит из 400 символов, и из 500. Формула даёт верхнюю границу, потому что по объёму восстанавливается только длина кода, а не то, сколько кодов использовано на самом деле.
- 5. Шаг 5. Проверка прямым ходом: алфавит из 512 символов требует ⌈log₂512⌉ = 9 бит; 1024 символа по 9 бит дают 9216 бит = 1152 байта = 1,125 Кбайта ✔
- 6. Шаг 6. Частая ошибка — забыть про множитель 8 и получить 1152 : 1024 = 1,125 бита на символ. Дробное число бит сразу выдаёт ошибку: столько не бывает. Дробный результат в этой формуле всегда означает потерянный перевод единиц.
- 7. Шаг 7. Ещё одна ловушка — принять 1,125 Кбайта за 1125 байт. Килобайт это 1024 байта, поэтому 1,125 Кбайта равны 1152 байтам. Разница невелика, но ответ она меняет: 1125 · 8 / 1024 даёт 8,79 бита, и целого числа не получается — что опять-таки сигнализирует об ошибке.
Ответ: 512 символов
Разбор примера
Сколько страниц текста поместится на носитель
Страница текста содержит 32 строки по 64 символа. Каждый символ кодируется одним байтом. Сколько таких страниц поместится на носителе объёмом 1 Мбайт?
Показать решение по шагам
- 1. Шаг 1. Символов на странице: 32 · 64 = 2048.
- 2. Шаг 2. Объём страницы: 2048 символов · 1 байт = 2048 байт = 2 Кбайта. Круглое число — хороший признак: в задачах этого типа числа подбирают так, чтобы всё делилось нацело.
- 3. Шаг 3. Объём носителя в тех же единицах: 1 Мбайт = 1024 Кбайта.
- 4. Шаг 4. Делим: 1024 : 2 = 512 страниц.
- 5. Шаг 5. Проверка обратным ходом: 512 страниц по 2 Кбайта занимают 1024 Кбайта = 1 Мбайт ✔
- 6. Шаг 6. Вариант с двухбайтной кодировкой. Если бы каждый символ занимал 2 байта, страница весила бы 4 Кбайта, и поместилось бы 256 страниц — ровно вдвое меньше. Объём прямо пропорционален весу символа, поэтому такие вопросы решаются без пересчёта.
- 7. Шаг 7. Вариант с палитрой символов. «Алфавит содержит 100 символов» означает ⌈log₂100⌉ = 7 бит на символ, и страница занимает 2048 · 7 = 14 336 бит = 1792 байта = 1,75 Кбайта. Тогда на мегабайт поместится 1024 : 1,75 = 585,1, то есть 585 страниц с округлением вниз.
- 8. Шаг 8. Обратите внимание, что в последнем варианте деление не сошлось нацело, и часть места осталась неиспользованной. Это нормально: округление вниз в вопросе «сколько поместится» отражает физический смысл — неполная страница не считается.
- 9. Шаг 9. И общая ловушка всех задач про текст: не путайте символы и байты. «Страница из 2048 символов» и «страница объёмом 2048 байт» — разные вещи, совпадающие только при однобайтной кодировке.
Ответ: 512 страниц
Кодировки: от ASCII до UTF-8 и что спрашивают
История кодировок объясняет все числа, встречающиеся в задачах, и запомнить её стоит ради этих чисел.
Кодировка ASCII, 1963 год. Кодировка на 7 бит, то есть 128 символов: латиница в двух регистрах, цифры, знаки препинания и управляющие коды. Кириллицы в ней нет вовсе.
Однобайтные кодировки для национальных алфавитов. Это Windows-1251, KOI8-R и другие: 8 бит, 256 символов: первые 128 совпадают с ASCII, вторые 128 отданы национальному алфавиту. Отсюда знаменитая беда девяностых: текст, набранный в одной кодировке и прочитанный в другой, превращался в бессмыслицу — байты те же, а таблица другая.
Unicode. Не кодировка, а таблица номеров: каждому символу всех письменностей мира присвоен свой номер. Как записать этот номер байтами — отдельный вопрос, на который отвечают UTF-8, UTF-16 и UTF-32.
UTF-32. По 4 байта на любой символ. Просто и расточительно.
UTF-16. По 2 байта на большинство символов. Именно эта кодировка имеется в виду, когда в задаче сказано «каждый символ кодируется двумя байтами».
UTF-8. Переменная длина: латиница 1 байт, кириллица 2 байта, многие азиатские письменности 3 байта, редкие символы 4. Победила потому, что для текстов на латинице совпадает с ASCII и не тратит лишнего.
Что из этого спрашивают. Вопросы бывают трёх видов: посчитать объём при известном весе символа, найти вес символа по объёму, сравнить объём одного текста в двух кодировках. Все три решаются одним соотношением V = K · i, где K — число символов, i — вес одного символа.
И одно замечание про формулировки. «Кодировка Unicode» в условиях ЕГЭ почти всегда означает 2 байта на символ, хотя строго говоря Unicode — это таблица, а не способ записи. Если в условии сказано именно «UTF-8», считать надо по группам символов, потому что вес у них разный.
И практическое замечание про то, как кодировка видна глазами. Если текст открыть не в той кодировке, вместо русских букв появляется бессмысленный набор латинских букв и знаков. Байты при этом не портятся: испорчено только прочтение, и стоит выбрать верную кодировку, как текст восстановится целиком. Именно поэтому современные редакторы хранят кодировку вместе с файлом или пользуются UTF-8 по умолчанию.
Единицы информации и почему 1024, а не 1000
Все переводы в заданиях 7 и 11 упираются в одну таблицу, и знать её надо наизусть.
1 байт = 8 бит. 1 Кбайт = 1024 байта = 2¹⁰ байт. 1 Мбайт = 1024 Кбайта = 2²⁰ байт. 1 Гбайт = 1024 Мбайта = 2³⁰ байт.
Почему 1024, а не 1000. Адресация памяти устроена двоично: разряд адреса удваивает число ячеек, поэтому естественные «круглые» размеры — это степени двойки. Ближайшая к тысяче степень двойки — 1024, и её назвали килобайтом. Разница с тысячей составляет 2,4 %, и на мегабайтах она вырастает до 5 %, а на гигабайтах — до 7 %.
Это не тонкость для педантов: ответ «733 Кбайта» вместо «768 Кбайт» получается ровно из деления на 1000 вместо 1024, и он не засчитывается.
Удобная техника счёта. Переводы — это вычитание из показателя степени двойки: биты → байты минус 3, байты → Кбайт минус 10, Кбайт → Мбайт минус 10. Значит, из бит в Мбайты сразу минус 23. Если объём записан как c · 2ⁿ бит, ответ в мегабайтах — это c · 2ⁿ⁻²³, и длинных делений не остаётся.
Степени двойки, которые стоит знать. 2⁴ = 16, 2⁸ = 256, 2¹⁰ = 1024, 2¹⁶ = 65 536, 2²⁰ = 1 048 576, 2²⁴ = 16 777 216. Первые две — про палитру, третья и пятая — про единицы памяти, четвёртая — про High Color и про максимум двухбайтного кода, шестая — про True Color.
И про мегабиты. Скорость каналов иногда дают в килобитах или мегабитах в секунду. Приставка та же, основание то же: 1 килобит = 1024 бита. Не путайте с байтами: канал «100 мегабит в секунду» передаёт около 12,5 мегабайта в секунду, и восьмёрка здесь решает всё.
Разбор примера
Сравнение двух кодировок: что экономнее
Документ содержит 1500 символов, из них 900 — латинские буквы и цифры, а 600 — кириллица. Сравните объём документа в UTF-8 и в UTF-16 и определите, сколько байт экономит более выгодная кодировка.
Показать решение по шагам
- 1. Шаг 1. В UTF-16 все символы весят одинаково, по 2 байта: 1500 · 2 = 3000 байт.
- 2. Шаг 2. В UTF-8 вес разный: латиница по 1 байту, кириллица по 2. Считаем по группам: 900 · 1 = 900 байт и 600 · 2 = 1200 байт.
- 3. Шаг 3. Складываем: 900 + 1200 = 2100 байт.
- 4. Шаг 4. Экономия: 3000 − 2100 = 900 байт, то есть ровно столько, сколько в документе латинских символов. Это не совпадение: каждый латинский символ в UTF-8 занимает на байт меньше, чем в UTF-16, а кириллические весят одинаково.
- 5. Шаг 5. Отсюда общее правило, которое стоит понимать, а не запоминать: UTF-8 выигрывает ровно на числе однобайтных символов. Для чисто латинского текста экономия достигает половины объёма, для чисто кириллического её нет вовсе.
- 6. Шаг 6. А если бы в документе были иероглифы? Они занимают в UTF-8 по 3 байта против 2 в UTF-16, и на них UTF-8 проигрывает. Именно поэтому в Японии и Китае UTF-16 распространён шире, чем в Европе.
- 7. Шаг 7. Проверка прикидкой: средний вес символа в UTF-8 здесь равен 2100 : 1500 = 1,4 байта — между единицей и двойкой, ближе к единице, потому что латиницы больше. Значение вне этого диапазона означало бы ошибку в счёте по группам.
- 8. Шаг 8. И типичная ошибка: посчитать «1500 символов по 1,5 байта в среднем» и получить 2250. Средний вес тут ни при чём — считать надо по группам, потому что доли символов разного веса неодинаковы.
Ответ: UTF-8 даёт 2100 байт против 3000 и экономит 900 байт
Как отличить прямую задачу от обратной
Все задачи алфавитного подхода — это одно соотношение V = K · i, где K — число символов, i — вес одного символа в битах. Различаются они только тем, какая величина неизвестна.
Прямая задача. Известны K и мощность алфавита. Порядок: из мощности получить i (логарифм с округлением вверх), перемножить, перевести в требуемые единицы.
Обратная по алфавиту. Известны K и объём. Порядок: объём в биты, поделить на K, получить i, возвести двойку в степень i.
Обратная по числу символов. Известны объём и алфавит. Порядок: объём в биты, поделить на i.
Сколько поместится. Объём носителя поделить на объём одного текста, округлить вниз.
Единая проверка для всех четырёх: вес символа обязан быть целым числом бит. Дробное значение означает, что где-то потерян множитель 8 или 1024, и искать ошибку надо в переводе единиц, а не в логике.
И единая ловушка: мощность алфавита и вес символа — разные величины. «Алфавит из 256 символов» даёт 8 бит на символ; подставив в формулу 256, вы увеличите ответ в 32 раза. Условия почти всегда формулируют через мощность именно ради этой проверки.
Задание №11 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №11 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №11 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №11 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.