Алгоритм решения задания 15. Часть 4
Учимся решать 15 задания четвёртого типа
Читать
На предприятии каждой изготовленной детали присваивают серийный номер, содержащий десятичные цифры и символы из 27-символьного специального алфавита. В базе данных каждый серийный номер занимает одинаковое и минимально возможное число байт. При этом используется посимвольное кодирование серийных номеров, все символы кодируются одинаковым и минимально возможным числом бит. Известно, что для хранения 3548 серийных номеров необходимо более 12 Кбайт памяти.
Определите минимально возможную длину серийного номера.
from math import ceil, log2
alphabet = 27 + 10
nums = 3_548
memory_size = 12 * 2 ** 10
# По формуле
sym_size = ceil(log2(alphabet))
serial_num_size = memory_size / nums
serial_num_len = ceil(serial_num_size * 2 ** 3 / sym_size)
print(serial_num_len)
# Подбором в цикле
for serial_num_len in range(1, 10):
bits = ceil(log2(alphabet))
bytes = ceil(serial_num_len * bits / 8)
if nums * bytes >= memory_size:
print(serial_num_len)
break
