Задание 7 ЕГЭ по информатике проверяет умение определять объём памяти, необходимый для хранения информации. В некоторых вариантах также нужно вычислить время или скорость передачи данных.
Все эти величины связаны общими формулами. Поэтому, если внимательно выписать данные из условия и привести их к одним единицам измерения, найти неизвестное значение будет несложно.
Формулировки задания
Формулировки задания 7 различаются прежде всего величиной, которую требуется найти. Это могут быть следующие значения:
Размер файла с данными
Время или объём переданных данных
Количество цветов в палитре
Число снимков в пакете
Глубина кодирования
В условии также может использоваться сжатие, уменьшающее итоговый размер файла. Но пугаться разнообразия формулировок не стоит. В основном вам предстоит работать с двумя видами данных: изображениями и звуком. Реже встречаются видеофайлы, которые содержат и изображение, и звук.
В данной статье мы рассмотрим только работу с изображениями.
Работа с изображением
Для начала вспомним, что такое изображение. Изображение на экране состоит из маленьких точек, которые называются пикселями.
Количество пикселей определяет разрешение изображения. Например, на рисунке ниже представлено изображение 4 на 2 пикселя.
Чем больше пикселей содержит изображение при одинаковом физическом размере, тем больше деталей оно может передать. При низком разрешении отдельные пиксели становятся заметнее, поэтому изображение выглядит менее чётким.
Каждый пиксель имеет свой цвет. В модели RGB цвет пикселя задаётся тремя компонентами: красной (R), зелёной (G) и синей (B). Изменяя интенсивность каждой компоненты, можно получать разные оттенки.
Модель RGB работает так: цвет пикселя описывается тремя числами, которые задают интенсивность красной, зелёной и синей компонент. Если все три значения максимальны, получается белый цвет, а если равны нулю — чёрный.
Далее познакомимся с понятием глубины цвета. Глубина цвета — это количество бит, используемых для кодирования цвета одного пикселя. От неё зависит, сколько различных цветов можно представить.
Глубина цвета измеряется в битах. При глубине 1 бит можно закодировать два цвета, при глубине 8 бит — 256 цветов, а при глубине 24 бита — 16 777 216 цветов.
Количество цветов N, которое можно закодировать при глубине цвета i, вычисляется по формуле:
Если количество цветов N является степенью двойки, глубину цвета можно найти по формуле:
Эта зависимость следует из формулы Хартли. Она связывает количество равновероятных вариантов и объём информации, необходимый для выбора одного из них.
В задачах с изображениями эта формула помогает определить количество бит, необходимое для кодирования цвета одного пикселя, то есть размер одного пикселя.
Давайте разберём её на примере. В распространённом варианте модели RGB на каждую цветовую компоненту выделяется по 8 бит. Тогда один пиксель занимает 3 · 8 = 24 бита
Теперь найдём количество цветов при глубине 24 бита. Для этого возведём 2 в степень 24 и получим 16 777 216 цветов.
Теперь выведем формулу для определения размера всего изображения. Мы знаем ширину, высоту и размер одного пикселя. Перемножив эти три величины, получим объём памяти для хранения изображения без сжатия.
Формула для определения объёма памяти, необходимого для хранения растрового изображения:
Здесь:
h — высота изображения,
w — ширина изображения,
i — вес одного пикселя.
Работа с передачей данных
Мы уже умеем вычислять объём файла. Но в задании 7 нас также могут попросить найти скорость передачи данных или время, за которое файл будет передан.
Для работы с передачей данных у нас есть следующая формула:
Здесь:
V — объём файла в битах,
q — скорость передачи данных в битах в секунду (бит/с),
t — время в секундах.
Из этой формулы можно найти время, разделив объём файла на скорость. Скорость передачи данных, в свою очередь, равна объёму файла, делённому на время передачи.
А если в условии говорится, что файл сжали на N процентов, то его новый размер составляет (100 − N)% от исходного. Например, после сжатия на 20% файла весом 10 МБ, от него останется 80% исходного объёма, то есть 8 МБ. Найти же исходный объём вы можете через пропорцию: если 8 МБ — это 80%, то чтобы найти 100% нужно 8 МБ разделить на 80% (число 0,8).
Алгоритм решения задания 7
Далее рассмотрим алгоритмы решения задания 7, связанные с изображениями.
У нас может быть несколько формулировок этого задания, например:
Каково максимально возможное количество снимков в одном пакете?
Какое максимальное/минимальное количество цветов можно использовать в изображении?
Какой объём трафика экономится при передаче сжатого изображения?
Сколько изображений поместится на носителе данных?
Все эти задания решаются по формулам. Вы можете расписывать вычисления на бумаге или выполнять их в Python. Программа особенно удобна при работе с большими числами и помогает увидеть результат каждого этапа.
Тип 1
Начнём разбор мы с такой формулировки:
Прибор автоматической фиксации нарушений правил дорожного движения делает цветные фотографии размером 1024 на 768 пикселей, используя палитру из 4096 цветов. Снимки сохраняются в памяти камеры, группируются в пакеты по несколько штук, затем передаются в центр обработки информации со скоростью передачи данных 1 310 720 бит/с.
Определите максимально возможное количество снимков в одном пакете, если на передачу одного пакета отводится не более 300 секунд.
Давайте распишем решение этого задания полностью, как если бы мы решали его на бумаге.
Сначала необходимо найти размер одного пикселя — i. Для этого вычислим логарифм по основанию 2 от 4096, то есть количества цветов в палитре. Получим 12, потому что 2¹² = 4096.
Нам известны высота и ширина изображения, а также глубина цвета i. Подставим эти значения в формулу и определим объём одного изображения:
V = h · w · i = 1024 · 768 · 12 = 9 437 184 бита.
Изображения группируются в пакеты по несколько штук. Сначала найдём максимально допустимый объём такого пакета.
Вспоминаем, что у нас есть формула вычисления объёма переданных данных:
V_п = q · t.
Скорость передачи у нас известна, время тоже, значит находим максимально возможный объём одного переданного пакета:
V_п = 1 310 720 · 300 = 393 216 000 бит.
Почему максимально допустимый? На передачу пакета отводится не более 300 секунд. Пакет меньшего объёма передастся быстрее, что условию не противоречит.
Если пакет будет хотя бы на один бит больше, передача займёт более 300 секунд и условие нарушится.
Теперь известны максимальный объём пакета и объём одного изображения. Разделим первое значение на второе и найдём количество изображений:
Q = 393 216 000 / 9 437 184 ≈ 41,67
Получается, что в пакет помещается 41 полное изображение и часть 42-го. Но передать часть снимка вместо целого по условию нельзя.
Проверим, поместятся ли в пакет 42 полных изображения. Их общий объём равен:
V_п = 9 437 184 · 42 = 396 361 728 бит.
Полученное число превышает максимальный объём пакета, поэтому передача займёт более 300 секунд. Такой вариант нам не подходит.
Значит, берём целую часть результата деления, то есть округляем количество изображений вниз.
Теперь мы готовы дать ответ на это задание: 41.
Пример 1
Рассмотрим ещё одну формулировку задания 7 первого типа:
Автоматическая фотоловушка в заповеднике, оснащённая датчиком движения, делает цветные фотографии проходящих мимо леопардов. Размер каждой фотографии 1024 х 64 пикселя, при этом используется палитра из 4096 цветов. Снимки сохраняются в памяти камеры, группируются по несколько штук, а затем передаются в центр охраны природы со скоростью передачи данных 655 360 бит/с.
Каково максимально возможное количество снимков в одном пакете, если на передачу одного пакета отводится не более 70 секунд.
from math import ceil, log2
res = 1024 * 64
bitrate = 655_360
colors = 4096
time = 70
pixel_size = ceil(log2(colors))
img_size = res * pixel_size
package_size = bitrate * time
img_in_package = package_size // img_size
print(img_in_package)
В ответ записываем полученное число 58.
Тип 2
В заданиях следующего типа необходимо вычислить количество цветов, которое можно использовать в изображении, то есть значение N из формулы Хартли:
Ознакомимся с такой формулировкой:
Прибор автоматической фиксации нарушений правил дорожного движения делает цветные фотографии размером 1280×720 пикселей. Снимки сохраняются в памяти камеры, группируются в пакеты по 69 штук, затем передаются в центр обработки информации со скоростью передачи данных 245760 байт/с.
Каково минимальное возможное количество цветов в палитре изображения, если на передачу одного пакета отводится более 270 секунд?
Как и первую задачу прошлого типа, сначала решим её вручную, подробно расписав каждое действие.
Сначала найдём объём данных, который передаётся ровно за 270 секунд. По условию пакет передаётся дольше, поэтому его настоящий объём должен быть больше полученного значения:
Скорость дана в байтах в секунду, поэтому мы сразу перевели её в биты в секунду, умножив на 8.
В пакете 69 изображений размером 1280 × 720 пикселей. Найдём граничное значение глубины цвета для одного пикселя:
i > 530 841 600 / (69 · 1280 · 720) ≈ 8,35 бита.
Глубина цвета должна быть целым числом и превышать 8,35. Минимальное подходящее значение — 9 бит.
Важно, что в условии сказано «более 270 секунд». При глубине 8 бит пакет передался бы быстрее, поэтому это значение не подходит.
Теперь определим минимальное количество цветов, для которого требуется 9 бит на пиксель.
В 8 битах можно закодировать 2⁸ = 256 цветов. Поэтому при 256 цветах хватит 8 бит, а девятый бит впервые понадобится для 257 цветов.
Следовательно, минимальное подходящее количество цветов равно 257.
В общем виде минимальное количество цветов, требующее глубины i бит, вычисляется так: N_min = 2(i — 1) + 1.
Подставляем i = 9 и получаем N_min = 2⁸ + 1 = 257. Это число и записываем в ответ.
Пример 2
Теперь рассмотрим задачу, в которой нужно, наоборот, найти максимальное количество цветов. Формулировка такая:
Для хранения произвольного растрового изображения размером 2560 х 5040 пикселей отведено 14 175 Кбайт памяти без учёта размера заголовка файла. Для кодирования цвета каждого пикселя используется одинаковое количество бит, коды пикселей записываются в файл один за другим без промежутков.
Какое максимальное количество цветов можно использовать в изображении?
И снова решать будем с помощью Python. Здесь нет ни пакетов, ни передачи данных. Сначала найдём максимальное целое количество бит на пиксель, которое помещается в выделенную память. Затем вычислим N.
Количество бит на пиксель обязательно целое, поэтому результат деления объёма памяти на число пикселей нужно округлить вниз (i = V // (h * w))
Запишем известные значения в переменные и сразу переведём килобайты в биты:
Запишем известные значения в переменные и сразу переведём килобайты в биты:
res = 2560 * 5040
memory_size = 14_175 * 2 ** 13
Целочисленно делим доступный объём памяти на количество пикселей, а затем находим количество цветов:
Получаем глубину 9 бит и ответ – 29, или же 512 цветов.
Тип 3
В заданиях третьего типа предстоит работать со сжатыми изображениями и вычислять объём трафика, сэкономленного при их передаче.
Разберём задачу с такой формулировкой:
Виталий делает снимки интересных мест и событий цифровой камерой своего смартфона. Каждая фотография представляет собой растровое изображение размером 1920×1080 пикселей и с палитрой из 223 цветов. В конце дня Виталий отправляет снимки друзьям с помощью приложения-мессенджера. Для экономии трафика приложение сжимает снимки, используя размер 1280×1024 пикселей и глубину цвета 21 бит.
Сколько Кбайт трафика экономится таким образом при передаче 120 фотографий?
Сразу решим это задание в Python. По большей части алгоритм нам знаком – вычисляем вес изображения по имеющимся данным. В конце лишь подсчитаем вес сжатого изображения и определим, насколько он получился меньше веса исходного изображения.
Чтобы получить ответ, найдём разницу между размерами исходного и сжатого изображений, умножим её на количество снимков и переведём биты в килобайты, разделив на 2 в тринадцатой степени:
Получаем 295425 Кбайт. В ответ записываем число 295425.
Пример 3
Следующая формулировка будет такой:
Виталий фотографирует интересные места и события цифровой камерой своего смартфона. Каждая фотография представляет собой растровое изображение размером 1024×768 пикселей, при этом используется палитра из 230 цветов. В конце дня Виталий отправляет снимки друзьям с помощью приложения-мессенджера. Для экономии трафика приложение оцифровывает снимки повторно, используя размер 800×600 пикселей и глубину цвета 28 бит.
Сколько Кбайт трафика экономится при передаче 100 фотографий?
В результате получаем 123937 Кбайт. Это число и записываем в ответ.
Тип 4
К последнему типу задания 7 относятся формулировки, в которых необходимо найти количество изображений на носителе данных.
Рассмотрим задание с такой формулировкой:
Фотограф делает цветные фотографии размером 7680×4320 пикселей, используя палитру из 216 цветов. Для сохранения снимков фотограф использует сменные карты памяти, каждая из которых вмещает не более 9 Гбайт данных. Когда на карте памяти остаётся недостаточно места для записи новой фотографии, фотограф берёт следующую, свободную карту. Известно, что фотограф сделал 4010 снимков.
Сколько снимков оказалось на последней карте памяти из использованных?
Здесь не нужно отдельно вычислять количество цветов: в формуле используется глубина цвета i, которая уже дана и равна 16 битам.
Чтобы узнать, сколько полных снимков помещается на одну карту, воспользуемся целочисленным делением //.
Выпишем имеющиеся данные:
res = 7680 * 4320
image = res * 16
memory_card = 9 * 2 ** 33
Найдём, сколько снимков помещается на одну карту памяти:
images_per_card = memory_card // image
Количество снимков на последней карте удобно найти по формуле ниже. В отличие от обычного остатка от деления, она корректно работает и тогда, когда последняя карта заполнена полностью:
И последняя задача в этой статье имеет такую формулировку:
Фотограф делает цветные фотографии размером 3840х2160 пикселей, используя палитру из 224 цветов. Для сохранения снимков фотограф использует сменные карты памяти, каждая из которых вмещает не более 16 Гбайт данных. Когда на карте остаётся недостаточно места для записи новой фотографии, фотограф заменяет карту на следующую свободную. Известно, что фотограф сделал 3742 снимка.
Сколько снимков оказалось на последней карте памяти из использованных?
Мы используем файлы cookie. Необходимые обеспечивают работу сайта: корзину и вход в личный кабинет. С вашего согласия мы также используем сервис Яндекс Метрика, чтобы анализировать посещаемость и улучшать сайт.
Подробнее — в политике конфиденциальности.