Ах, заветное 13-е задание в ЕГЭ по информатике — тот самый момент, когда даже калькулятор вздыхает с облегчением. Что там сложного? Посчитать количество информации!
Ну, кто же не мечтал о таком подарке судьбы? Это почти как сказать: «Пожалуйста, посчитайте свои носки». Простое дело, правда?
Начнем с классического примера.
Представьте себе 20 пользователей, каждый из которых хранит у себя парочку секретиков — пароль и дополнительные сведения объемом в 24 байта на душу. Если вы подумали: «Ого, это ж сколько всего!», не торопитесь — математика уже выстроилась в очередь и готова помочь. 24 байта на пользователя умножаем на 20 пользователей — получаем 480 байт.
Вот и вся арифметика.
Теперь про пароли. Каждый состоит из 15 символов, а символы эти берутся из набора всего лишь из восьми вариантов. Серьезно?
Восьми? Это как играть в лото с восемью шарами — скучно, но надежно! Чтобы узнать, сколько бит понадобится для хранения одного такого пароля, нам нужна формула. Не пугайтесь слова «формула» — она всего лишь напоминает нам про логарифмы и степень двойки.
Если бы у меня был рубль за каждый раз, когда я слышал слово «логарифм» на экзамене… Но вернемся к делу.
Количество бит i равно количеству символов k умноженному на логарифм по основанию 2 от мощности алфавита M (количество символов). В нашем случае: i = 15 * log₂(8). А log₂(8) — это просто три (ведь 2 в кубе равно 8).
Значит i = 15 * 3 = 45 бит.
Дальше переводим биты в байты. Тут главное не забыть: один байт — это восемь бит.
Делим 45 на восемь и получаем примерно 5.6 байт. И поскольку компьютер любит округлять вверх (ведь ему всегда нужно чуть больше места под чай и печеньки), берем сразу шесть байт.
Итого для двадцати пользователей по шесть байт на пароль — ровно сто двадцать байт плюс те самые четыреста восемьдесят под дополнительные сведения дают нам… барабанная дробь… шестьсот байт! Вот так просто.
А теперь представьте себе другую ситуацию: семнадцать сотрудников и алфавит побогаче — цифры от нуля до девяти и целая куча латинских букв как строчных, так и прописных (всего-то шестьдесят два символа).
Тут уже не так просто вычислить логарифм по основанию два от шестидесяти двух символов — ведь это не круглая цифра вроде восьми или шестнадцати.
Но если прикинуть: две в пятой степени равны тридцати двум (слишком мало), а две в шестой – шестьдесят четыре (чуть больше нужного), то приходится брать большую степень – шесть бит на символ.
Значит для пароля из одиннадцати символов получаем: i = 11 * 6 = 66 бит для хранения одного пароля.
Переводим в байты: делим шестьдесят шесть на восемь и получаем приблизительно восемь целых с копейками байтов — округляем опять же вверх до девяти байт.
Умножаем на семнадцать пользователей – выходит сто пятьдесят три байта.
Ну что тут скажешь? Компьютерные системы любят порядок и аккуратность больше наших бабушек с их вязаными пледами!
В целом задача кажется простой настолько, что можно было бы рассказать анекдот:
— Почему программистам легко сдавать информатику?
— Потому что они считают биты во сне!
И правда, если даже ваш кот умеет считать количество информации о своих мурлыках (а он точно знает сколько раз вы нажали кнопку мыши), то вам-то бояться нечего!