0 / 0 / 0
Регистрация: 18.10.2020
Сообщений: 5

Сжатие сообщений

19.11.2020, 10:54. Показов 1025. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На планете, где живет инопланетянин Лучик, вся информация передается в шестнадцатеричном виде. Любое битовое сообщение разбивается на блоки по 4 бита и преобразуется в символы от 0 до F (шестнадцатеричные цифры - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). Так как каналы связи очень нагружены, в системах связи используют сжатие данных.
В большинстве систем связи на планете при передаче текстовой информации используется следующий алгоритм сжатия. Исходный текст состоит из заглавных латинских букв от A до Z и пробелов. В процессе работы алгоритма используется упорядоченный словарь. Изначально он заполняется всеми возможными односимвольными последовательностями (буквы от A до Z и пробел). В процессе работы алгоритм посимвольно просматривает исходный текст и обрабатывает его следующим образом.

Записать в текущую фразу T первый символ.
Если исходные данные окончились, вывести код T.
Считать следующий символ Q.
Если фраза TQ есть в словаре, то T = TQ, перейти на шаг 2.
Если фразы TQ нет в словаре, то вывести код T, добавить TQ в словарь, присвоить T = Q и перейти на шаг 2.
Заметим что для разархивации (декодирования) получившийся словарь не нужен. Он легко формируется в процессе разархивации.
Кодом фразы считается порядковый номер этой фразы в словаре. Для удобства перевода в шестнадцатеричный вид коды предварительно записываются в двоичном виде с переменным числом бит. Рассмотрим это на примере.
Пусть исходное сообщение имеет вид
A BIG BLACK BUG BIT A BIG BLACK DOG
В нашем алфавите 27 букв (буквы от A до Z и пробел), поэтому для его кодирования достаточно 5 бит. Начальный словарь имеет вид
A = 00000
B = 00001
....
Z = 11001
(пробел) = 11010
Процесс архивации (кодирования) представлен в таблице ниже (символ “_“ обозначает пробел).
Тек. фразаКод на выходеНовая запись словаряКомментарий
A0 = 00000  
_26 = 1101027: A_ 
B1 = 0000128: _B 
I8 = 0100029: BI 
G6 = 0011030: IG 
_B28 = 1110031: G_далее используем 6-битные группы
L11 = 00101132: _BL 
A0 = 00000033: LA 
C2 = 00001034: AC 
K10 = 00101035: CK 
_B28 = 01110036: K_ 
U20 = 01010037: _BU 
G_31 = 01111138: UG 
BI29 = 01110139: G_B 
T19 = 01001140: BIT 
_26 = 01101041: T_ 
A_27 = 01101142: _A 
BI29 = 01110143: A_B 
G_B39 = 10011144: BIG 
LA33 = 10000145: G_BL 
CK35 = 10001146: LAC 
_26 = 01101047: CK_ 
D3 = 00001148: _D 
O14 = 00111049: DO 
G6 = 00011050: OG 
После таких несложных преобразований, сообщение вместо исходных 35 × 5 = 175 бит, стало занимать 6 × 5 + 19 × 6 = 144 бит. После преобразования к шестнадцатеричному виду заархивированное сообщение будет иметь вид (если длина итоговой последовательности бит не делится на 4, последовательность дополняется справа нулевыми битами)
06828370B00229C51F75369B767863683386
Процесс декодирования происходит аналогично. Единственным отличием является, то словарь заполняется в два этапа.
ДанныеНа выходеПолная новая записьЧастичная новая записьКомментарий
00000 = 0A 27: A? 
11010 = 26_27: A_28: _? 
00001 = 1B28: _B29: B? 
01000 = 8I29: BI30: I? 
00110 = 6G30: IG31: G? 
11100 = 28_B31: G_32: _B?далее используем 6-битные группы
001011 = 11L32: _BL33: L? 
000000 = 0A33: LA34: A? 
000010 = 2C34: AC35: C? 
001010 = 10K35: CK36: K? 
011100 = 28_B36: K_37: _B? 
010100 = 20U37: _BU38: U? 
011111 = 31G_38: UG39: G_? 
011101 = 29BI39: G_B40: BI? 
010011 = 19T40: BIT41: T? 
011010 = 26_41: T_42: _? 
011011 = 27A_42: _A43: A_? 
101000 = 40BI43: A_B44: BI? 
100111 = 39G_B44: BIG45: G_B? 
100001 = 33LA45: G_BL46: LA? 
100011 = 35CK46: LAC47: CK? 
011010 = 26_47: CK_48: _? 
000011 = 3D48: _D49: D? 
001110 = 14O49: DO50: O? 
000110 = 6G50: OG51: G? 
Некоторая проблема при декодировании возникает, когда новый код сразу оказывается в сообщении. Пусть мы расшифровываем сообщение ABABABA:
ДанныеНа выходеПолная новая записьЧастичная новая записьКомментарий
00000 = 0A 27: A? 
00001 = 1B27: AB28: B? 
11011 = 27AB28: BA29: AB? 
11101 = 29AB?29: AB? что с этим делать?
Кажется, это неразрешимая ситуация. Мы знаем наперёд, запись 29 означает ABA, но как алгоритм узнает об этом? Заметим, что запись 29 состоит из записи 27 плюс символ, идущий следующим. Значит запись 29 оканчивается на «символ, идущий следующим». Но, так как эта запись посылается сразу, то она должно начинаться с «символа, идущего следующим», и поэтому она оканчивается тем же символом, что и начинается, в данном случае - A. Это позволяет определить, что запись 29 — это ABA.
Группа путешественников, совершавшая Кругопланетную экспедицию, сбилась с пути и попала на заброшенную станцию. На ее центральный компьютер постоянно приходило одно и тоже сообщение, однако программное обеспечение, отвечающее за разархивацию данных, по странному стечению обстоятельств не работало. Помогите путешественникам понять, что содержится в этом странном сообщении – напишите программу, которая его разархивирует (декодирует).

Формат ввода
В единственной строке записана последовательность шестнадцатеричных цифр, длиной не более 105 – заархивированное сообщение.
Формат вывода
Выведите исходное сообщение до архивации.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.11.2020, 10:54
Ответы с готовыми решениями:

Сжатие строки
# 3 функции нужны для стандартизации программ потом (буду использовать в других программах) def ReadArrInteger(n): L = for i in...

Сжатие строки
Питон изучаю не так давно, сейчас прохожу один курс, столкнулся с таким заданием, где нужно сжать строку по типу: Ввод: aaaabbcaa ...

Сжатие текста
Добрейшего вечера всем) Задача: сшить N-ое количество строк так, чтобы в выходной строке минимальной длины можно было найти эти строки. ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.11.2020, 10:54
Помогаю со студенческими работами здесь

Сжатие символьного файла
Символьный файл содержит пробелы. Необходимо сжать этот файл (убрать пробелы) Вроде простая задачка, но вот с функциями Пайтона не особо...

Задача на сжатие строки
Добрый день, подскажите пожалуйста, как можно наиболее проще и наименьшим кодом решить данную задачу: Стандартное решение: message =...

Сжатие целочисленного массива
Добрый день! Нужна помощь с заданием: Сжать целочисленный массив, чтобы печатал другой массив с диапазоном, если идут по порядку. ...

Сжатие массива неизвестной длины
Напишите программу, которая сжимает массив ненулевых целых чисел следующим образом: первый элемент заменяется на сумму первого и последнего...

Решение задачи на RLE-сжатие
RLE-сжатие – один из самых простых методов сжатия строки, основанный на сокращении подстрок, состоящих из одинаковых символов. Сжатие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru