К содержанию

Задание 7

Объём графической и звуковой информации

Сколько места занимают изображения и звук, как меняется объём после сжатия и сколько времени идёт передача.

5 подтем · 54 задачи · базовый · ≈ 5 мин

Подтема 1 из 5

Биты и длина кода

Биты, байты и крупные единицы — и сколько битов нужно, чтобы закодировать N цветов.

Как устроена тема

В задании 7 считают, сколько места занимает изображение или звукозапись, — и что с этим объёмом будет дальше: сжатие, передача по каналу, запись на карту. Вот задача, которую мы будем решать всю тему:

«Камера делает снимки размером 1024 × 768 пикселей с палитрой из 3000 цветов. Снимки передаются пакетами по 50 штук по каналу связи со скоростью 2 000 000 бит/с. Сколько секунд передаётся один пакет? В ответе запиши целую часть числа».

Объём — это сколько элементов хранится и сколько битов занимает каждый; дальше объём сжимают или передают и округляют ответ так, как требует вопрос. Сначала разберём, что сказано в условии:

В условииЧто это значит
1024 × 768 пикселейв снимке 1024 · 768 точек
палитра из 3000 цветовкаждая точка хранит код цвета — столько битов, чтобы хватило на 3000
пакет из 50 снимковобъём одного снимка умножить на 50
2 000 000 бит/сстолько битов канал передаёт за секунду
целая часть числадробную часть ответа отбросить

Тема состоит из пяти подтем — у каждой своя страница. Идём по ним по порядку:

  1. Биты и длина кода — ты сейчас здесь.
  2. Изображение — сколько места занимает снимок.
  3. Сжатие и заголовки — как меняется объём после сжатия.
  4. Звук — сколько места занимает звукозапись.
  5. Передача — время передачи и ответ задачи темы: 235.

Биты и байты

Один двоичный знак — один бит, восемь битов — байт, а дальше единицы растут в 1024 = 2¹⁰ раза. Запись 01001101 занимает 8 бит, и запись 00000000 — тоже: нули хранятся так же, как единицы.

ЕдиницаВ байтахВ битах
1 байт18 = 2³
1 Кбайт1024 = 2¹⁰2¹³
1 Мбайт1024² = 2²⁰2²³
1 Гбайт1024³ = 2³⁰2³³

Из крупных единиц в мелкие умножают, из мелких в крупные — делят. Со степенями двойки это удобно: 2¹⁸ бит = 2¹⁸ / 2¹³ = 2⁵ = 32 Кбайт. Проверить перевод можно одной строкой Python, как на калькуляторе:

print(3 * 1024 * 8, 2 ** 18 // 2 ** 13)
24576 32

** — степень, а — целая часть частного: 3 Кбайт = 24 576 бит, 2¹⁸ бит = 32 Кбайт.

Длина кода

Код из i бит имеет 2ⁱ вариантов: каждый новый бит удваивает их число. Двумя битами записываются 4 кода: 00, 01, 10, 11; тремя — 8; восемью — 256.

Для N цветов нужна наименьшая длина i, при которой 2ⁱ ≥ N. В задаче темы цветов 3000: 2¹¹ = 2048 мало, 2¹² = 4096 хватает. Значит, код цвета — 12 бит, и часть кодов останется незанятой — это нормально.

3000 цветов лежат между 2048 и 4096: одиннадцати битов мало, нужно двенадцать.

Здесь округляют только вверх, даже если N ближе к меньшей степени: для 300 цветов нужно 9 бит, хотя 300 ближе к 256. Восьми битов хватает лишь на 256 кодов.

Длина кода программой

С 2025 года число цветов в задачах — не степень двойки и доходит до десятков миллионов. Соседние степени удобно найти программой.

Функция bits увеличивает i, пока 2ⁱ меньше N; первое i, при котором кодов хватает, она и возвращает. Запусти её по шагам для 300 цветов:

def bits(n):    i = 0    while 2 ** i < n:        i += 1    return i  print(bits(300))
9

Функция пригодится до конца темы: её вызывают, где нужна длина кода.

print(bits(5), bits(300), bits(3000), bits(20000000))
3 9 12 25

Нужная и выделенная длина

Если условие само говорит, сколько битов выделено на цвет, берут это число. «Используется 20 цветов, на код каждого цвета выделено 8 бит» — объём считают с 8 битами, хотя хватило бы пяти. Наименьшую длину ищут, только когда условие её требует: «минимально возможное количество бит», «одинаковое минимальное число бит».

Итого

  • Байт8 бит
  • Кбайт1024 байт = 2¹³ бит
  • Мбайт1024 Кбайт = 2²³ бит
  • Длина коданаименьшее i, при котором 2ⁱ ≥ N; 3000 цветов → 12 бит
  • Выделено в условииберут заданное число битов

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1
Сколько битов в 3 Кбайт?
ОтветСкрыть ответ
Ответ
24 576: 3 · 1024 байт · 8 бит = 3 · 2¹³.
Вопрос 2
Сколько Кбайт составляют 2¹⁸ бит?
ОтветСкрыть ответ
Ответ
32: в Кбайте 2¹³ бит, 2¹⁸ / 2¹³ = 2⁵.
Вопрос 3
Сколько битов нужно на код, чтобы различить 5 цветов? Почему не 2?
ОтветСкрыть ответ
Ответ
3: двумя битами можно записать только 2² = 4 кода, а нужно 5; трёх битов хватает на 8.
Вопрос 4
Для 300 цветов нужно 8 бит или 9? Ведь 300 ближе к 256, чем к 512.
ОтветСкрыть ответ
Ответ
9: восемь битов дают только 256 кодов, остальным цветам кодов не хватит. Длину кода округляют вверх, а не к ближайшему.
Вопрос 5
В изображении 20 цветов, а на код каждого цвета выделено 8 бит. Сколько битов на пиксель брать для расчёта объёма?
ОтветСкрыть ответ
Ответ
8: длина задана условием. Минимальные 5 бит считают, только когда условие требует наименьшую длину.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Биты в 2,5 Мбайт

Сколько битов содержится в 2,5 Мбайт?

Введите число.

Биты в 3 Кбайт

Сколько битов в 3 Кбайт?

Введите число.

2²⁰ бит в Кбайтах

Сколько Кбайт составляют 2²⁰ бит? Реши через степени двойки.

Введите число.

Код для 600 цветов

Нужно закодировать 600 цветов кодами одинаковой длины. Сколько битов нужно на код одного цвета?

Введите число.

Код для 4097 цветов

Какая наименьшая длина кода нужна, чтобы закодировать 4097 цветов кодами одинаковой длины?

Введите число.

Для кодирования используется 100 000 различных цветов, код каждого цвета имеет одинаковую минимально возможную длину. Сколько бит занимает код одного цвета?

Введите число.