Сообщение в твиттере, записанное буквами 32-символьного алфавита, содержит 140 символов. какое количество информации оно несет?
202
466
Ответы на вопрос:
Дано: мощность алфавита равна n=32 количество символов к=140 найти: количество информации i-? решение: по формуле n=2^i 32=2^5 => i=5 - один символ алфавита весит 5 бит формула количества информации в тексте i=k*i значит i=140*5=700 бит или 87,5 байт
{если мы попробуем кодировать точку нулем, тире - единицей, то получаем число в двоичной системе с максимальным числом разрядов, равным 4. к сожалению, в такой кодировке комбинации, начинающиеся с точки, будут неоднозначными, потому что будут начинаться с незначащих нулей. для устранения неоднозначности можно добавить еще три бита слева, которые будут указывать количество точек в коде до первого тире (0-4), но лучше добавить 4 бита и использовать для кодирования полный байт. тогда его первая шестнадцатиричная цифра даст число незначащих нулей (точек), а вторая - сам код. исключение - символ 'э', который кодируется 5 символами. для разделения слов введем еще символ пробела а .- 0001 0001 & 11 = 17 б 0000 1000 & 08 = 8 в 0001 0011 & 13 = 19 г 0000 0110 & 06 = 6 д 0000 0100 & 04 = 4 е . 0001 0000 & 10 = 16 ж 0011 0001 & 31 = 49 з 0000 1100 & 0c = 12 и .. 0010 0000 & 20 = 32 й 0001 0111 & 17 = 23 к 0000 0101 & 05 = 5 л 0001 0100 & 14 = 20 м -- 0000 0011 & 03 = 3 н -. 0000 0010 & 02 = 2 о 0000 0111 & 07 = 7 п 0001 0110 & 16 = 22 р 0001 0010 & 12 = 18 с 0011 0000 & 30 = 48 т - 0000 0001 & 01 = 1 у 0010 0001 & 21 = 33 ф 0010 0010 & 22 = 34 х 0100 0000 & 40 = 64 ц 0000 1010 & 0a = 10 ч 0000 1110 & 0e = 14 ш 0000 1111 & 0f = 15 щ 0000 1101 & 0d = 13 ъ 0000 1001 & 09 = 9 ы 0000 1011 & 0b = 11 ь 0000 1001 & 09 = 9 э 0011 0100 & 34 = 52 ю 0010 0011 & 23 = 35 я 0001 0101 & 15 = 21 конечно, можно было бы просто поместить коды в элементы массива и поиск нужного производить поэлементым сравнением, но принятая нами кодировка позволит получать номер элемента массива сразу. иными словами, мы построили так называемую хэш-функцию для доступа к таблице перекодировки. это популярное решение, которое применяется достаточно часто в различных алгоритмах кодировки и поиска. максимальный номер среди полученных нами = 64, минимальный - 1. следовательно, нужно создать массив t[1..64] и поместить буквы в элементы с соответствующими индексами (а - в 17-й элемент, б - в 8-й и т.д.) получив очередное слово - "символ" азбуки морзе, например, '', выполняем следующие шаги: 1) если пять правых символов слова равны '', искомый символ t[52]; 2) если пять правых символов слова равны '', искомый символ t[63]; 3) подсчитываем k - количество точек в четырех правых символах слова a5a6a7a8, пока не встретим тире. вычисляем значение k: =16*k; 4) начиная с первого слева тире заменяем в символах слова точки нулями, тире - единицами; 5) вычисляем сумму n=a5*8+a6*4+a7*2+a8 и увеличиваем на нее значение k. k: =k+n 6) искомый символ равен t[k] алгоритм кажется сложным, но его реализация в функции hash проста. } var ptr: integer; function hash(s: string): integer; {возвращает номер элемента в таблице т по коду морзе из строки s} var i, k, n, m: integer; begin if s = '' then result : = 0 else if s = '' then result : = 52 else if s = '' then result : = 63 else begin i : = 1; k : = 0; while i < = length(s) do if s[i] = '.' then begin i : = i + 1; k : = k + 1 end else i : = 5; n : = 0; m : = 1; for i : = length(s) downto max(k, 1) do begin if s[i] = '-' then n : = n + m; m : = m * 2 end; result : = 16 * k + n end end; function getword(s: string): string; {возвращает очередное слово строки s, начиная поиск с позиции ptr по окончании поиска ptr устанавливается на следующий за пробелом символ или выходит за конец строки} var i: integer; c: string; begin c : = ''; i : = posex(' ', s, ptr); if i > 0 then begin result : = copy(s, ptr, i - ptr); ptr : = i + 1 end else begin result : = copy(s, ptr, length(s) - ptr + 1); ptr : = length(s) + 1 end; end; var s: string; n: integer; t: array[1..64] of char; begin t[17] : = 'а'; t[8] : = 'б'; t[19] : = 'в'; t[6] : = 'г'; t[4] : = 'д'; t[16] : = 'е'; t[49] : = 'ж'; t[12] : = 'з'; t[32] : = 'и'; t[23] : = 'й'; t[5] : = 'к'; t[20] : = 'л'; t[3] : = 'м'; t[2] : = 'н'; t[7] : = 'о'; t[22] : = 'п'; t[18] : = 'р'; t[48] : = 'с'; t[1] : = 'т'; t[33] : = 'у'; t[34] : = 'ф'; t[64] : = 'х'; t[10] : = 'ц'; t[14] : = 'ч'; t[15] : = 'ш'; t[13] : = 'щ'; t[11] : = 'ы'; t[9] : = 'ь'; t[52] : = 'э'; t[35] : = 'ю'; t[21] : = 'я'; t[63] : = ' '; { для отладки s : = ' .- - -- .. '; } writeln('введите строку в коде морзе, пробел кодируется '); readln(s); ptr : = 1; n : = 100; write('раскодировка: '); while n > 0 do begin n : = hash(getword(s)); if n > 0 then write(t[n]); end; тестовое решение: введите строку в коде морзе, пробел кодируется .- - -- .. раскодировка: мир writeln end.
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
nizomabdurahmon22.01.2022 14:41
-
kristavikown6tn02.04.2020 23:11
-
Элизаббета22.03.2023 10:04
-
toktamuratovanilufar14.03.2023 09:58
-
gerad3434311.06.2022 12:36
-
lerkina1211.04.2020 23:10
-
KisKris160510.05.2022 17:49
-
tseng778815.07.2021 22:38
-
Vano2205200011.02.2021 17:43
-
kuku228809.08.2021 06:48
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.