Форум » Вычисление количества информации » Кодирование записи (№ 263) » Ответить

Кодирование записи (№ 263)

Agch: Здравствуйте! № 263 В школьной базе данных хранятся записи, содержащие информацию об учениках: <Фамилия> – 16 символов: русские буквы (первая прописная, остальные строчные), <Имя> – 12 символов: русские буквы (первая прописная, остальные строчные), <Отчество> – 16 символов: русские буквы (первая прописная, остальные строчные), <Год рождения> – числа от 1992 до 2003. Каждое поле записывается с использованием минимально возможного количества бит. Определите минимальное количество байт, необходимое для кодирования одной записи, если буквы е и ё считаются совпадающими. Cудя по ответу (28 байт), мощность алфавита для формирования каждого поля ФИО берут 32 символа, хотя в скобках указано, что используются как прописные, так и строчные буквы (первая прописная, остальные строчные), поэтому я увеличила мощность в два раза (N=32*2=64). Почему в итоге не нужно учитывать прописные буквы в общей мощности алфавита? И зачем тогда "загадочные" пояснения в скобках?

Ответов - 7

Поляков: Agch пишет: Почему в итоге не нужно учитывать прописные буквы в общей мощности алфавита? Ценность этой задачи в том, чтобы задуматься о том, стоит ли хранить первую букву как заглавную. Ведь если гарантируется, что она всегда заглавная, можно просто при выводе на экран учитывать это и хранить ее как строчную, экономя место в памяти. На ЕГЭ таких задач, я думаю, не будет.

Agch: Спасибо, Константин Юрьевич!

Leovan@yandex.ru: Текстовые поля кодируется (16+16+12)*5= 220бит На год рождения- старшая цифра имеет 2 значения (1 или 2), кодируется 1 битом, вторая и третья могут быть либо 9, либо 0, кодируются 1 битом, последняя может принимать значения 0,..,9, для её кодирование необходимо 4 бита. Всего для записи 220+1+1+1+4=227 бит или 29 байт. С ответом не сходится. Что нет так? Подскажите, пожалуйста. Лариса


Поляков: Leovan@yandex.ru пишет: На год рождения- старшая цифра имеет 2 значения (1 или 2), кодируется 1 битом, вторая и третья могут быть либо 9, либо 0, кодируются 1 битом, последняя может принимать значения 0,..,9, для её кодирование необходимо 4 бита. Всего для записи 220+1+1+1+4=227 бит или 29 байт. С ответом не сходится. Что нет так? Год рождения кодируется как одно число, а не по одной цифре.

Leovan@yandex.ru: Спасибо

VectorASD: То, что для хранения символа достаточно и 32 комбинаций я и так понял, но почему не выходит нормальный ответ-то? [pre2] def Bits(Ch): if Ch == 0: return 1 N = 0 while Ch > 0: Ch //= 2 N += 1 return N def Bytes(Bits): return (Bits + 7) // 8 def KBytes(B): return (B + 1023) // 1024 print("Ответ Z263:", Bytes(Bits(32) * (16 + 16 + 12) + Bits(2003 - 1992 + 1))) [/pre2]

VectorASD: Оказалась банальная ошибка в самом Bits. Правильнее было: [pre2] def Bits(Ch): if Ch == 1: return 1 Ch -= 1 N = 0 while Ch > 0: Ch //= 2 N += 1 return N [/pre2]



полная версия страницы