Ученики школы «Будущее» уже с младших классов много времени и сил отдают программированию
.pdf
Зарегистрируйся в 2 клика в Кампус и получи неограниченный доступ к материалам с подпиской Кампус+ 🔥
Ученики школы «Будущее» уже с младших классов много времени и сил отдают программированию. Сначала на площадке Яндекс.Учебник они проходят базовые алгоритмы с исполнителем «Робот», затем на ней же осваивают язык программирования Python.
Чтобы младшеклассникам было интереснее проходить алгоритмы, ученики 9 «П» класса сделали настоящего робота и подготовили для него специальное поле. Управляют роботом командами с компьютера.
Первая версия робота могла только двигаться в четырех направлениях, и ученики использовали равномерное кодирование для передачи команд роботу.
.
Во второй версии робота количество передаваемых команд увеличилось (несколько команд ученики даже зарезервировали на будущее). Было решено перейти к неравномерному кодированию. Чтобы узнать частоты использования команд для исполнителя, ученики 9 «П» провели исследование.
Итогом стала таблица:
Постройте оптимальный неравномерный код, удовлетворяющий условию Фано по таблице с частотами команд. Код должен включать резервные команды.
Сколько бит потребуется для кодирования следующей программы исполнителя «Робот»?
move_up()
move_up()
move_right()
fill_cell()
move_right()
fill_cell()
Решение
Команды выписываем в таблицу в порядке убывания частот. Затем их разделяем на две группы так, чтобы суммы часто в каждой из групп были бы по возможности одинаковыми. Всем командам верхней половины в качестве первого символа записывается 1, а всем нижним – 0
. Каждая из полученных групп, в свою очередь, разбивается на две подгруппы с одинаковыми суммарными частотами и т.д. Процесс повторяется до тех пор, пока в каждой подгруппе не останется по одной букве.
Таблица 1 – Кодирование по методике Фано
Команда Частота Вспомогательные столбцы Код Длина кода
move_up() 39,1% 1 - - - -
1 1
move_down() 22,6% 0 1 0 - -
010 3
move_left() 15,0% 0 1 1 - -
011 3
move_right() 13,5% 0 0 0 - -
000 3
fill_cell() 9,8% 0 0 1 0 -
0010 4
резерв 0% 0 0 1 1 1 - 00111 5
резерв 0% 0 0 1 1 0 1 001101 6
резерв 0% 0 0 1 1 0 0 001100 6
Получаем:
move_up() – 1 бит;
move_up() – 1 бит;
move_right() – 3 бита;
fill_cell() – 4 бита;
move_right() – 3 бита;
fill_cell()– 4 бита.
Всего понадобится:
1 + 1 + 3 + 4 + 3 + 4 = 16 бит.
Ответ: 16.