Форум » Вычисление количества информации » № 108 » Ответить

№ 108

Коробко: Здравствуйте! Подскажите , пожалуйста, как решается задача под номером 108. При моем решении ответ 30 бит. 1000/100=10 байт. Т.к. при кодировании используются только буквы или цифры, то i= 5, 10*5 =50 бит, далее 80-50 = 30 бит. А в ответе 28 бит. Спасибо.

Ответов - 5

Поляков: В условии не сказано, что каждый символ кодируется отдельно.

Коробко: Здравствуйте, извините меня, но я не понимаю, как решить эту задачу по-другому. Не могли бы Вы подсказать, как это сделать. Спасибо.

inf_bu: Коробко пишет: Не могли бы Вы подсказать, как это сделать. Спасибо. В задании ничего не сказано про посимвольное кодирование, т.е. кодировать нужно не каждый символ идентификатора, а каждый идентификатор. Всего идентификаторов 36^10 = 3656158440062976 (комбинаторика). Для кодирования такого количества идентификаторов требуется минимум 52 бита. На пользователя отведено 80 бит, 80-52=28. До 2021-го года задание было бы чрезмерным, но сейчас у учеников есть компьютеры. Для вычисления логарифма достаточно двух строк кода: [pre2] import math print(math.log(3656158440062976, 2))[/pre2] Ну и в вашем решении выше допущена еще одна ошибка, если бы кодирование было бы посимвольным, то i=6, т.к. мощность алфавита 36.


aln1947: Попробовал запустить программу участника inf_bu, она дает, конечно, не целое число (т.к. применяем логарифм), поэтому результат надо округлять в большую сторону, тогда получается 52. [pre2]. import math b = math.log(3656158440062976, 2) print (b) print(round(b)) ''' 51.69925001442312 52 ''' ..[/pre2]

inf_bu: aln1947 пишет: Попробовал запустить программу участника inf_bu Конечно мы не можем взять дробное количество бит, т.к. речь идет не об абстрактных величинах, а о физической памяти. Поэтому округляем в большую сторону, т.к. 51 бита недостаточно.



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