Сжатая последовательность получилась -3BCB11A3E. но как не считала, с ответом -- 6 байт...

0 голосов
54 просмотров

Сжатая последовательность получилась -3BCB11A3E. но как не считала, с ответом -- 6 байт --не
сходится. помогите пожалуйста


image

Информатика (371 баллов) | 54 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Условие нехорошее: не совсем понятно, зачем запоминать количество неодинаковых букв (в данном случае это увеличивает ответ, хотя в общем случае может быть полезным), поразрядное кодирование тоже не к месту (какие могут быть разряды у строки? Тогда уж посимвольное). Возможно, и ответ просто неверный указан. 

Можно исхитриться и получить ответ 6 байт. Считаем, последовательность неодинаковых букв тоже разбивается на серии по 16 элементов. Тогда в используемом алфавите 59 символов: 33 числа (-16..16) и 26 заглавных букв (по условию кодируются числа, а не цифры). 2^5 < 59 <= 2^6, поэтому каждый символ кодируется 6 битами.<br>
Последовательность, разбитая на символы:
-3 B C B 11 A 3 E — 8 символов, на их кодирование уйдёт 8 * 6 бит = 6 байт.

Другой вариант: в закодированной строке всегда стоит сначала число, потом соответствующее числу количество символов, потом опять число и так далее. Значит, числа и буквы можно кодировать независимо. путаницы не возникнет.
На кодирование одного из 33 чисел нужно 6 бит, на кодирование одной из 26 букв — 5 бит. Они кодируются одинаковым числом битов, значит, каждое число или буква кодируются 6 битами. Дальше аналогично первому варианту.

(148k баллов)