Найти в Дзене
Романов учит

Разбор всех задач с kompege.ru Ч.20

Оглавление

№ 1342 Danov2101 (Уровень: Сложный)

При регистрации в компьютерной системе на каждого сотрудника заводится запись из двух полей: идентификатор и биометрия лица. Идентификатор состоит из семи эмодзи, каждый из которых закодирован в виде трех шестнадцатеричных цифр из диапазона U+1Fххх Unicode символов. Биометрия лица представлена десятью десятичными трехзначными числами.  В базе данных для хранения каждого поля отведено минимально возможное целое число байт. При этом используют посимвольное кодирование полей. Все символы (или числа) поля кодируют одинаковым и минимально возможным
количеством бит. Определите объём памяти (в Кбайт), необходимый для хранения 256 записей. В ответе запишите только целое число – количество Кбайт.

Решение:

1. Идентификатор (7 эмодзи)

  • Каждый эмодзи принадлежит диапазону U+1Fххх, что означает, что кодовая точка находится в пределах от U+1F000 до U+1FFFF.
  • Количество возможных значений для каждого эмодзи:
    Диапазон U+1F000 до U+1FFFF включает 0x1FFFF - 0x1F000 + 1 = 0x1000 (4096) возможных значений.
  • Для кодирования 4096 значений требуется:

log2(​4096)=12 бит на символ.

  • Однако в Unicode кодовые точки обычно кодируются целым числом байт
    (например, UTF-8 или UTF-16). Так как 12 бит — это 1.5 байта, а такое
    кодирование нецелесообразно, вероятно, используется UTF-16 (2 байта на
    символ, так как U+1F000 находится вне BMP и требует 4 байта в UTF-16, но в задании сказано "минимально возможное").
  • Но в условии сказано, что каждый эмодзи кодируется тремя шестнадцатеричными цифрами (U+1Fххх), что даёт ровно 16^3=4096 вариантов, и используется минимальное количество бит, то есть 12 бит на символ.
  • Для 7 эмодзи:
    7×12=847×12=84 бита.
    Переводим в байты: 84/8=11 байт.

2. Биометрия (10 трёхзначных чисел)

  • Каждое число трёхзначное, то есть принимает значения от 0 до 999.
  • Количество возможных значений: 1000.
  • Для кодирования 1000 значений требуется:
    log⁡2(1000)≈10 бит (так как 2^10=1024≥1000).
  • Для 10 чисел:
    10×10=100 бит.
    Переводим в байты: 100/8=13 байт.

3. Объём одной записи

  • Идентификатор: 11 байт.
  • Биометрия: 13 байт.
  • Итого: 11+13=24 байта на запись.

4. Объём 256 записей

  • 256×24=6144 байт.
  • Переводим в килобайты:
    6144/1024=6 Кбайт.

№ 825 Джобс 14.12.2020 (Уровень: Сложный)

Датчик считывает значения интенсивности поступающего света. Известно, что при считывании значение округляется до одного из 2000 возможных. Каждое считанное значение кодируется одинаковым минимально возможным количеством бит. Также известно, что значения считываются сериями по 50 измерений. Каждая такая серия сохраняется на жесткий диск, на котором занимает целое количество байт. Если последняя переданная серия меньше 50 значений, переданные в ней значения также сохраняются в файле с помощью минимального целого количества байт.

За время своей работы датчик считал 12312 значений. Найдите минимальное целое количество килобайт, которого хватит для хранения считанных значений. В качестве ответа запишите одно число – найденное количество килобайт.

Решение:

1. Определение количества бит на одно значение

  • Датчик может выдавать одно из 2000 возможных значений.
  • Для кодирования 2000 значений требуется:

log2(​2000)≈10.965, значит, нужно 11 бит на значение (так как 2^11=2048≥2000).

2. Хранение серии из 50 измерений

  • В одной серии 50 значений, каждое по 11 бит.
  • Общий объём серии: 50×11=550 бит.
  • Переводим в байты:
    550/8=69 байт (так как 550/8=68.75, округляем вверх).

3. Общее количество серий

  • Всего значений: 12312.
  • Полных серий по 50 значений:
    12312/50=246 серий.
  • Остаток значений:
    12312 mod 50=12 значений.

4. Хранение неполной серии (12 значений)

  • 12 значений по 11 бит:
    12×11=132 бита.
  • Переводим в байты:
    132/8=17 байт.

5. Общий объём данных

  • Полные серии:
    246×69=16974 байт.
  • Неполная серия:
    17 байт.
  • Итого:
    16974+17=16991 байт.

6. Переводим в килобайты

  • 1 КБ=1024 байт.
  • 16991/1024≈16.593, округляем вверх до 17 КБ.

Если у вас остались вопросы, хотите разобраться, хотите подготовиться к ЕГЭ/ОГЭ по информатике или изучить программирование на языке Python - добро пожаловать на пробный урок в телеграм t.me/MikhailRomanov

Не забывайте подписываться на канал! Таким образом вы помогаете выходу новых разборов!

А также ставьте лайк, пишите комментарии.
ЖМИ НА ССЫЛКУ СНИЗУ ДЛЯ НАВИГАЦИИ ПО РЕШЕНИЯМ
Тут все разборы собраны воедино