Сжатие методом Хаффмана «КАКАЯ ЗИМА ЗОЛОТАЯ!
КАК БУДТО ИЗ ДЕТСКИХ ВРЕМЕН...
НЕ НАДО НИ СОЛНЦА, НИ МАЯ –
ПУСТЬ ДЛИТСЯ ТОРЖЕСТВЕНИЫЙ СОН.
ПУСТЬ Я В ЭТОМ СНЕ ПОЗАБУДУ
КОГДА-ТО МАНИВШИЙ ОГОНЬ,
И ЛЕТО ПРЕДАМ, КАК ИУДА,
ЗА ТРИДЦАТЬ СНЕЖИНОК В ЛАДОНЬ.
ЗАТЕМ, ЧТО И Я ХОЛОДЕЮ,
ТЕПЛО УЖЕ СТРАШНО ПРИНЯТЬ:
Я СЛИШКОМ ДАВНО НЕ УМЕЮ
НИ ТЛЕТЬ, НИ ГОРЕТЬ, НИ СЖИГАТЬ…
ВСЕ ЧАЩЕ, ВСЕ ДОЛЬШЕ НЕМЕЮ:
К ЗИМЕ УЖЕ ДЕЛО, К ЗИМЕ...
И ТОЛЬКО ТОГО ОТОГРЕЮ,
КОМУ ХОЛОДНЕЕ, ЧЕМ МНЕ»

IraIvan IraIvan    2   10.01.2021 13:53    279

Ответы
Julia1965 Julia1965  20.12.2023 18:31
Для решения данной задачи нам потребуется воспользоваться алгоритмом сжатия методом Хаффмана. 1. Подсчет частоты встречаемости символов: - Сначала прочитаем весь текст и составим таблицу со всеми символами и числом их встречаемости. Знаки препинания и пробелы также считаются символами: " ": 95 ",": 2 ".": 4 "3": 1 "А": 1 "Б": 1 "Д": 2 "Е": 2 "Ж": 2 "И": 3 "К": 6 "Л": 1 "М": 2 "Н": 5 "О": 4 "П": 2 "Р": 2 "С": 5 "Т": 6 "У": 3 "Х": 4 "Ц": 1 "Ч": 3 "Ш": 2 "Ы": 2 "Я": 2 "а": 9 "б": 1 "в": 3 "г": 3 "д": 7 "е": 12 "ж": 1 "з": 4 "и": 12 "й": 1 "к": 7 "л": 3 "м": 9 "н": 14 "о": 20 "п": 6 "р": 5 "с": 9 "т": 15 "у": 4 "ц": 2 "ч": 8 "ш": 3 "щ": 1 "ъ": 3 "ы": 5 "ь": 6 "э": 1 "ю": 1 "я": 4 2. Составление дерева Хаффмана: - Упорядочиваем все символы по частоте их встречаемости. Буква с минимальной частотой становится самым левым узлом, а буква с максимальной частотой становится самым правым узлом. Все остальные символы упорядочиваем слева направо в порядке убывания частоты. - Для каждой пары символов, двигаясь слева направо, создаем новый узел и добавляем его в дерево. Глубина узла определяется суммой частот встречаемости символов в нем. - Повторяем процедуру объединения узлов до тех пор, пока в дереве не останется всего один узел. 3. Присвоение кодов каждому символу: - Переходим от корневого узла вниз по дереву, добавляя 0 или 1 в код в зависимости от того, пойдем мы налево или направо. Для каждого символа определяем его код. 4. Замена символов кодами: - Заменяем каждый символ в тексте его соответствующим кодом из таблицы, сжимая тем самым текст. Результат: После сжатия текста методом Хаффмана, исходный текст будет заменен на последовательность битов, где каждый символ представлен своим кодом. Пример: "ЗИМА": 000 "ЗОЛОТАЯ": 001 "КАК": 010 "БУДТО": 011 "ИЗ": 100 "ДЕТСКИХ": 101 "ВРЕМЕН": 110 ... (остальные символы) Таким образом, исходный текст "КАКАЯ ЗИМА ЗОЛОТАЯ! КАК БУДТО ИЗ ДЕТСКИХ ВРЕМЕН... НЕ НАДО НИ СОЛНЦА, НИ МАЯ – ПУСТЬ ДЛИТСЯ ТОРЖЕСТВЕНИЫЙ СОН. ПУСТЬ Я В ЭТОМ СНЕ ПОЗАБУДУ КОГДА-ТО МАНИВШИЙ ОГОНЬ, И ЛЕТО ПРЕДАМ, КАК ИУДА, ЗА ТРИДЦАТЬ СНЕЖИНОК В ЛАДОНЬ. ЗАТЕМ, ЧТО И Я ХОЛОДЕЮ, ТЕПЛО УЖЕ СТРАШНО ПРИНЯТЬ: Я СЛИШКОМ ДАВНО НЕ УМЕЮ НИ ТЛЕТЬ, НИ ГОРЕТЬ, НИ СЖИГАТЬ… ВСЕ ЧАЩЕ, ВСЕ ДОЛЬШЕ НЕМЕЮ: К ЗИМЕ УЖЕ ДЕЛО, К ЗИМЕ... И ТОЛЬКО ТОГО ОТОГРЕЮ, КОМУ ХОЛОДНЕЕ, ЧЕМ МНЕ" будет представлен кодами: 010 010 001 001 010 100 011 111 000 100 100 101 010 101 001 010 011 100 010 011 101 101 111 001 100 101 101 000 010 100 001 010 010 101 011 100 010 000 010 100 000 010 001 111 110 100 011 001 001 011 110 001 100 100 011 000 100 001 100 111 110 010 001 100 111 000 001 101 101 101 000 100 010 100 110 101 001 111 000 001 101 001 001 101 100 010 110 001 111 110 001 111 110 001 001 101 101 000 010 111 110 100 100 101 001 011 100 010 001 001 010 010 111 110 101 001 010 000 010 001 Обратите внимание, что сжатый текст менее объемный по сравнению с исходным, что позволяет меньше занимать места при хранении или передаче информации.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика