Максимальная длина идентификатора
Criado em: 21 de janeiro de 2025
Criado em: 21 de janeiro de 2025
При регистрации в компьютерной системе каждому объекту присваивается идентификатор, состоящий из некоторого количества символов и содержащий только десятичные цифры и символы из 100-символьного специального алфавита. В базе данных для хранения каждого идентификатора отведено одинаковое и минимально возможное целое число байт. При этом используют посимвольное кодирование идентификаторов, все символы кодируют одинаковым и минимально возможным количеством бит. Определите максимально возможную длину идентификатора, если известно, что для хранения 1800 идентификаторов отведено не более 720 Кбайт памяти. В ответе запишите только целое число.
Разбор задачи
Общее количество различных символов
По условию идентификатор может содержать:
Минимальное количество бит на символ
Чтобы закодировать 110 различных символов, нужно не меньше
Размер одного идентификатора в байтах
Пусть максимальная длина идентификатора равна символов. Тогда каждый символ требует 7 бит, а всего на идентификатор нужно бит. Хранение ведётся целым числом байт, значит на каждый идентификатор отводится
Общее ограничение по памяти
Всего в базе идентификаторов, и на их хранение отведено не более Кбайт. В задаче обычно под Кбайтом понимают байта ( Кбайт = байт ).
Таким образом, получаем неравенство:
Поиск максимального
Сначала оценим без учёта потолка:
Поскольку ,
Но нужно учитывать целочисленное округление (потолок) при вычислении байт. Проверяем целые вокруг 468:
:
,
.
Тогда общий объём:
байт,
что превышает 737,280.
:
,
.
Тогда общий объём:
байт,
что не превышает 737,280.
Проверка уже даст ещё больше байт (и тем более превысит лимит).
Таким образом, максимально возможная длина идентификатора, чтобы суммарный объём не вышел за 720 Кбайт, есть .
Автоматическая фотоловушка в заповеднике, оснащённая датчиком движения, делает цветные фотографии проходящих мимо леопардов. Размер каждой фотографии 1024 × 64 пикселя, при этом используется палитра из 4096 цветов. Снимки сохраняются в памяти камеры, группируются в пакеты по несколько штук, а затем передаются в центр охраны природы со скоростью передачи данных 655 360 бит/с. Каково максимально возможное количество снимков в одном пакете, если на передачу одного пакета отводится не более 70 секунд?
Разберём задачу по шагам:
Размер одного снимка в битах
Скорость передачи данных
Скорость — 655 360 бит/с.
Максимально возможный объём данных за 70 секунд
Число снимков в одном пакете
Пусть — количество снимков в пакете. Тогда полный объём пакета:
Это должно быть не больше 45 875 200 бит:
Поскольку должно быть целым, максимально возможное .
В терминологии сетей ТCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 63.7.215.0 и маской сети 255.255.252.0. Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно 8?
Разбор задачи
Определим адресную ёмкость сети
Маска в двоичном виде имеет 22 установленных в 1 бита (по 8 бит в первых двух октетах и 6 бит в третьем):
Следовательно, это сеть с префиксом . Число адресов в такой сети
(Здесь не делается различия между «адресами хостов» и «служебными» адресами — вопрос сформулирован так, что под «IP-адресами в сети» имеется в виду весь диапазон.)
Выясним, какие биты в адресе «жёстко зафиксированы»
«Сетевая» часть — первые 22 бита, «хостовая» часть — последние 10 бит.
Итого в фиксированных (сетевых) 22 битах стоит
единиц.
Анализ «хостовой» части
В «хостовой» части 10 бит (2 бита от третьего октета + 8 бит четвёртого октета). Обозначим эти 10 бит за . Количество единиц в может быть от до .
Полное число единиц в 32-битном IP-адресе тогда равно
где — число установленных в 1 бит среди этих 10.
Условие «число единиц не кратно 8»
Требуется подсчитать, при скольких величина
не делится на 8. Эквивалентно:
Заметим, что . Значит, условие «делится на 8» переписывается как:
Иначе говоря, «не делится» означает .
Сколько 10-битных чисел имеют ?
В диапазоне от до (включительно) единственное значение, которое даёт остаток 3 по модулю 8, — это ровно . (Число единиц не может быть 11 или 19 и т.д., потому что у нас всего 10 бит.)
Значит, нужно найти, сколько 10-битных двоичных векторов имеют ровно 3 единицы. Это
Стало быть, ровно у 120 адресов «общее число единиц» в IP получается кратно 8.
Итоговая выборка
Всего адресов в сети — . Из них у 120 число единиц кратно 8, а у остальных — не кратно 8.
Шифр кодового замка представляет собой последовательность из пяти символов, каждый из которых является цифрой от 1 до 6. Сколько различных вариантов шифра можно задать, если известно, что цифра 3 должна встречаться в коде ровнодин раз, а каждая из других допустимых цифр может встречаться в шифре любое количество раз или не встречаться совсем, но при этом количество чётных цифр в шифре не превосходит количество нечётных?
Разбор задачи по шагам
У нас есть пятизначный код (5 символов), каждый символ — это цифра от 1 до 6. Требуется:
Раз в коде должна быть ровно одна «3», выберем для неё позицию в пятизначной последовательности.
После выбора позиции под «3» останется 4 свободных позиции, которые можно заполнить любыми цифрами из множества (то есть «3» туда уже ставить нельзя, иначе получилось бы больше одного «3»).
С учётом уже имеющейся одной «3» (которая нечётная!):
Условие «чётных не более, чем нечётных» означает
Но , следовательно:
То есть может быть , или , но не больше.
У нас есть 4 позиции, в которых ровно чётных и нечётных.
Число способов выбрать и расставить чётных и нечётных в 4 позициях:
Значит, для данного общее число расстановок:
Суммируем по :
Для :
Для :
Для :
Суммарно:
Как только мы выбрали конкретную четырёхзначную комбинацию (из 328 возможных), нужно решить, где в пятиместном коде стоит наша единственная «3».
Каждый такой выбор даёт уникальный код (ведь порядок в последовательности важен), значит коэффициент на 5:
Это и есть число различных пятиместных кодов, удовлетворя всем условиям.
При регистрации в компьютерной системе каждому объекту присваивается идентификатор, состоящий из 201 символа и содержащий только десятичные цифры и символы из 2000-символьного специального алфавита. В базе данных для хранения каждого идентификатора отведено одинаковое и минимально возможное целое число байт. При этом используют посимвольное кодирование идентификаторов, все символы кодируют одинаковым и минимально возможным количеством бит. Определите объём памяти (в Кбайт), необходимый для хранения 19456
идентификаторов.
В ответе запишите только целое число - количество Кбайт.
Разбор задачи
Состав алфавита
Минимальное число бит на символ
Требуется закодировать 2010 различных символов. Для этого нужно не меньше
Поскольку и , получаем:
Объём на один идентификатор
Длина идентификатора — 201 символ. Значит, на один идентификатор уходит
Хранение ведётся в целом числе байт, значит фактически на один идентификатор отводится
(Ведь , округляем вверх до 277.)
Общий объём для 19 456 идентификаторов
Перевод в килобайты
По условию «Кбайт» обычно считают равным байтам. Проверим деление:
Оказалось, что делится на 1024 точно без остатка.
Реши кодом питон
На вход алгоритма подаётся натуральное число N (N > 3). Алгоритм строит по нему новое число R следующим образом.
Ниже приведён пример кода на Python, который находит минимальное , для которого получающееся по описанному правилу число превышает 256.
pythondef transform(N): """ Возвращает число R, полученное из N по заданному правилу: 1. Берём двоичную запись N (без префикса '0b'). 2. Если N чётное, дописываем справа две последние двоичные цифры N в том же порядке. Если N нечётное, дописываем справа три последние двоичные цифры N в том же порядке. 3. Полученную новую двоичную строку переводим в десятичное число. """ bin_str = bin(N)[2:] # двоичная строка без '0b' if N % 2 == 0: # Для чётного числа дописываем последние 2 бита suffix = bin_str[-2:] else: # Для нечётного — последние 3 бита suffix = bin_str[-3:] new_bin_str = bin_str + suffix return int(new_bin_str, 2) def find_minimum_exceeding_256(): """ Находит минимальное натуральное N > 3 такое, что R(N) > 256. """ N = 4 while True: R = transform(N) if R > 256: return N N += 1 # Запуск поиска answer = find_minimum_exceeding_256() print(answer)
Функция transform(N)
:
N
(строка без префикса '0b'
).N
чётное, к этой строке добавляются последние 2 двоичные цифры N
.N
нечётное, добавляются последние 3 двоичные цифры.Функция find_minimum_exceeding_256()
:
Если запустить такой код, выясняется, что минимальное , дающее , равно 33.