Автор | Сообщение |
|
Отправлено: 17.04.16 21:36. Заголовок: Кодирование записи (№ 263)
Здравствуйте! № 263 В школьной базе данных хранятся записи, содержащие информацию об учениках: <Фамилия> – 16 символов: русские буквы (первая прописная, остальные строчные), <Имя> – 12 символов: русские буквы (первая прописная, остальные строчные), <Отчество> – 16 символов: русские буквы (первая прописная, остальные строчные), <Год рождения> – числа от 1992 до 2003. Каждое поле записывается с использованием минимально возможного количества бит. Определите минимальное количество байт, необходимое для кодирования одной записи, если буквы е и ё считаются совпадающими. Cудя по ответу (28 байт), мощность алфавита для формирования каждого поля ФИО берут 32 символа, хотя в скобках указано, что используются как прописные, так и строчные буквы (первая прописная, остальные строчные), поэтому я увеличила мощность в два раза (N=32*2=64). Почему в итоге не нужно учитывать прописные буквы в общей мощности алфавита? И зачем тогда "загадочные" пояснения в скобках?
|
|
|
Ответов - 7
[только новые]
|
|
|
| Администратор
|
Сообщение: 1097
|
|
Отправлено: 18.04.16 18:45. Заголовок: Agch пишет: Почему в..
Agch пишет: цитата: | Почему в итоге не нужно учитывать прописные буквы в общей мощности алфавита? |
|
Ценность этой задачи в том, чтобы задуматься о том, стоит ли хранить первую букву как заглавную. Ведь если гарантируется, что она всегда заглавная, можно просто при выводе на экран учитывать это и хранить ее как строчную, экономя место в памяти. На ЕГЭ таких задач, я думаю, не будет.
|
|
|
|
Отправлено: 19.04.16 01:02. Заголовок: Спасибо, Константин ..
Спасибо, Константин Юрьевич!
|
|
|
|
Отправлено: 30.04.16 11:46. Заголовок: Задача 263
Текстовые поля кодируется (16+16+12)*5= 220бит На год рождения- старшая цифра имеет 2 значения (1 или 2), кодируется 1 битом, вторая и третья могут быть либо 9, либо 0, кодируются 1 битом, последняя может принимать значения 0,..,9, для её кодирование необходимо 4 бита. Всего для записи 220+1+1+1+4=227 бит или 29 байт. С ответом не сходится. Что нет так? Подскажите, пожалуйста. Лариса
|
|
|
|
| Администратор
|
Сообщение: 1118
|
|
Отправлено: 30.04.16 12:12. Заголовок: Leovan@yandex.ru пиш..
Leovan@yandex.ru пишет: цитата: | На год рождения- старшая цифра имеет 2 значения (1 или 2), кодируется 1 битом, вторая и третья могут быть либо 9, либо 0, кодируются 1 битом, последняя может принимать значения 0,..,9, для её кодирование необходимо 4 бита. Всего для записи 220+1+1+1+4=227 бит или 29 байт. С ответом не сходится. Что нет так? |
|
Год рождения кодируется как одно число, а не по одной цифре.
|
|
|
|
Отправлено: 01.05.16 15:54. Заголовок: Спасибо ..
Спасибо
|
|
|
|
Отправлено: 04.05.21 11:56. Заголовок: Получается 34 вместо 28
То, что для хранения символа достаточно и 32 комбинаций я и так понял, но почему не выходит нормальный ответ-то? 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)))
|
|
|
|
Отправлено: 04.05.21 14:35. Заголовок: Оказалась банальная ..
Оказалась банальная ошибка в самом Bits. Правильнее было: def Bits(Ch): if Ch == 1: return 1 Ch -= 1 N = 0 while Ch > 0: Ch //= 2 N += 1 return N
|
|
|
|