← Все вопросы

Задание 11 КЕГЭ: длина кодовой цепочки при равномерном кодировании

Задан 16 месяцев назад448 просмотров3 ответа
12

Задание 11: в системе хранится N разных объектов, каждому даётся уникальный код одинаковой длины из символов какого-то алфавита (минимально возможной длины). Спрашивают, сколько бит/символов займёт сообщение. Как это считать без ошибок?

3 ответа

22

Длина одного кода = минимальное k, при котором (размер алфавита)**k ≥ N. Потом умножаешь на количество объектов в сообщении.

import math

N = 300            # сколько объектов кодируем
alpha = 2          # размер алфавита (для бит — 2)
k = math.ceil(math.log(N, alpha))
# подстраховка от ошибок округления log:
while alpha ** k < N:
    k += 1
print('длина одного кода:', k)
print('всё сообщение:', k * 50)   # если в сообщении 50 объектов

Ключевое слово в условии — «минимально возможной длины»: берём наименьшее k, чтобы кодов хватило на все N объектов. И не путай «бит на код» с «бит на всё сообщение» — это две разные величины, которые в условии часто идут подряд.

Fkalkf fkdpkgok Проверка `while alpha**k < N` спасает от косяков с float у math.log · 16 месяцев назад
Андрей Гошко Часто ещё просят перевести в байты — не забудь поделить на 8 и округлить вверх · 16 месяцев назад
7

Минимальное k: 2**k ≥ N для бит. Дальше умножаешь на число символов в сообщении.

5

math.ceil(math.log2(N)), но лучше добить циклом из-за погрешности.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект