Директор решил занести всех учеников его школы в базу данных. Для каждого ученика составляется логин и пароль. Пароль содержит 7 символов и составляется из шестнадцатеричных цифр и 241 символа из специального набора. Логин создается автоматически и должен допускать однозначное декодирование логина каждого ученика (для каждого ученика создается свой отдельный логин). В базе данных для хранения сведений о каждом логине и пароле отдельно отведено минимально возможное целое число байт. Все пароли (и логины, отдельно) должны занимать одинаковое число байт. При этом используют посимвольное кодирование логина и пароля, все символы кодируются минимальным и одинаковым количеством бит. Определите, сколько дисков объёмом 1 МБ нужно для хранения в базе данных 132000 учеников.
Классно, давай разберёмся и поймём, почему твой ответ 1 диск неверный, а правильный — 2.
Подсказка (для начала):
- Логин и пароль кодируются посимвольно: каждый символ логина — из 257 символов, каждый символ пароля — тоже из этого набора. Минимальные биты на символ — 9.
- Нужно выбрать минимальное число символов в логине так, чтобы можно закодировать 132000 разных логинов.
- Учти: для логина и пароля можно использовать разное число байт, главное — чтобы в каждом поле занимало минимальное целое число байт, достаточное для этого поля.
Разбор задачи и решение (пошагово):
1) Сколько символов в логине нужно?
- alphabet для логина: 257 символов.
- число логинов требуется: 132000.
- Если логин состоит из L символов, то число вариантов равно 257^L.
- 257^2 = 66 049 (недостаточно), 257^3 = 16 974 593 (достаточно).
- Значит, минимальная длина логина L = 3 символа.
2) Сколько байт нужно для логина?
- Каждый символ кодируется 9 битами.
- Логин из 3 символов: 3 * 9 = 27 бит.
- Чтобы хранить 27 бит, нужно целых байт: ceil(27/8) = 4 байта.
3) Сколько байт нужен паролю?
- Пароль имеет 7 символов, каждый символ — 9 бит.
- Всего: 7 * 9 = 63 бит.
- Байты: ceil(63/8) = 8 байт.
4) Сколько байт выделено на каждое поле отдельно?
- По условию: каждое поле (логин отдельно, пароль отдельно) занимает минимально возможное целое число байт, и на логин и на пароль выбирают свои значения независимо.
- Байты для логина: 4 байта.
- Байты для пароля: 8 байт.
5) Общее количество байт на одного ученика и количество needed дисков
- Общее на одного ученика = 4 (логин) + 8 (пароль) = 12 байт.
- Всего для 132000 учеников: 132000 * 12 = 1 584 000 байт.
- Один диск имеет 1 МБ. В МБ обычно считают либо 1 000 000 байт (десятичная МБ), либо 1 048 576 байт (мебибайты, 1 MiB). В обоих случаях 1 584 000 байт требуют более чем 1 диск.
- При 1 000 000 байт на диск: 1 584 000 / 1 000 000 = 1.584 -> нужно 2 диска.
- При 1 048 576 байт на диск: 1 584 000 / 1 048 576 ≈ 1.51 -> тоже нужно 2 диска.
Итого: нужно 2 диска.
Почему твой ответ 1 диск неверный:
- Даже при минимизации, общее число байт на 132000 записей будет 132000 × 12 = 1 584 000 байт (или хотя бы 1 452 000–1 584 000 байт в диапазоне из-за нюансов округления, но точно больше 1 MB). Это уже больше 1 MB, значит 1 диск недостаточен.
- Твой вариант 11 байт на запись (3 байта для логина и 8 байт для пароля) даёт 132000 × 11 = 1 452 000 байт, всё равно больше 1 MB, т.е. тоже не помещается в один диск. Но это противоречит условию: логин действительно требует 4 байта, потому что логин из 3 символов даёт 27 бит, что требует 4 байта хранения.
Правильный ответ: 2 диска.
Если хочешь, могу привести ещё одну версию рассуждений под другой вариант трактовки (например, считать 1 МБ строго равной 1 048 576 байт и показать, как в этом случае можно получить точно 2). Идём дальше?
Пожалуйста, оцени мой ответ лайком или дизлайком.