|
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 6
|
|
Сжатие данных методом Хаффмана13.12.2011, 08:34. Показов 5733. Ответов 10
Метки нет (Все метки)
надо прогу сделать...
самую простейшую... Задача: вводишь строку символов (можно ограничиться 50 символами думаю), программа сжимает и выдает код и наоборот... помогите очень надо... в работе метода разобрался, но реализовать не могу... В программировании не силен... буду очень признателен...
0
|
|
| 13.12.2011, 08:34 | |
|
Ответы с готовыми решениями:
10
Сжатие текста алгоритмом Хаффмана. Где же ошибка? Сжать XML файл методом Хаффмана или арифметическим методом или методом RLE Сжатие методом Хаффмана |
|
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
|
|
| 13.12.2011, 10:42 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 6
|
|
| 13.12.2011, 11:39 [ТС] | |
|
Задача построения кода Хаффмана равносильна задаче построения соответствующего ему дерева. Приведем общую схему построения дерева Хаффмана:
1. Составим список кодируемых символов (при этом будем рассматривать каждый символ как одноэлементное бинарное дерево, вес которого равен весу символа). 2. Из списка выберем 2 узла с наименьшим весом. 3. Сформируем новый узел и присоединим к нему, в качестве дочерних, два узла выбранных из списка. При этом вес сформированного узла положим равным сумме весов дочерних узлов. 4. Добавим сформированный узел к списку. 5. Если в списке больше одного узла, то повторить 2-5 пункты. Приведем пример: построим дерево Хаффмана для сообщения S="A H F B H C E H E H C E A H D C E E H H H C H H H D E G H G G E H C H H". Для начала введем несколько обозначений: 1. Символы кодируемого алфавита будем выделять жирным шрифтом: A, B, C. 2. Веса узлов будем обозначать нижними индексами: A5, B3, C7. 3. Составные узлы будем заключать в скобки: ((A5+B3)8+C7)15. Итак, в нашем случае A={A, B, C, D, E, F, G, H}, W={2, 1, 5, 2, 7, 1, 3, 15}. 1. A2 B1 C5 D2 E7 F1 G3 H15 2. A2 C5 D2 E7 G3 H15 (F1+B1)2 3. C5 E7 G3 H15 (F1+B1)2 (A2+D2)4 4. C5 E7 H15 (A2+D2)4 ((F1+B1)2+G3)5 5. E7 H15 ((F1+B1)2+G3)5 (C5+(A2+D2)4)9 6. H15 (C5+(A2+D2)4)9 (((F1+B1)2+G3) 5+E7)12 7. H15 ((C5+(A2+D2)4) 9+(((F1+B1)2+G3) 5+E7)12)21 8. (((C5+(A2+D2)4) 9+(((F1+B1)2+G3) 5+E7)12)21+H15)36 В списке, как и требовалось, остался всего один узел. Дерево Хаффмана построено.Листовые узлы дерева Хаффмана соответствуют символам кодируемого алфавита. Глубина листовых узлов равна длине кода соответствующих символов. Путь от корня дерева к листовому узлу можно представить в виде битовой строки, в которой "0" соответствует выбору левого поддерева, а "1" - правого. Используя этот механизм, мы без труда можем присвоить коды всем символам кодируемого алфавита. Выпишем, к примеру, коды для всех символов в нашем примере: A=0010bin C=000bin E=011bin G=0101bin B=01001bin D=0011bin F=01000bin H=1bin Теперь у нас есть все необходимое для того чтобы закодировать сообщение S. Достаточно просто заменить каждый символ соответствующим ему кодом: S/="0010 1 01000 01001 1 000 011 1 011 1 000 011 0010 1 0011 000 011 011 1 1 1 000 1 1 1 0011 011 0101 1 0101 0101 011 1 000 1 1". Оценим теперь степень сжатия. В исходном сообщении S было 36 символов, на каждый из которых отводилось по [log2|A|]=3 бита (здесь и далее будем понимать квадратные скобки [] как целую часть, округленную в положительную сторону, т.е. [3,018]=4). Таким образом, размер S равен 36*3=108 бит Размер закодированного сообщения S/ можно получить воспользовавшись замечанием 2 к определению 1, или непосредственно, подсчитав количество бит в S/. И в том и другом случае мы получим 89 бит. Итак, нам удалось сжать 108 в 89 бит. Теперь декодируем сообщение S/. Начиная с корня дерева будем двигаться вниз, выбирая левое поддерево, если очередной бит в потоке равен "0", и правое - если "1". Дойдя до листового узла мы декодируем соответствующий ему символ. Ясно, что следуя этому алгоритму мы в точности получим исходное сообщение S
0
|
|
|
|
||||||
| 13.12.2011, 12:06 | ||||||
|
Вот, у меня модуль завалялся какой-то.
0
|
||||||
|
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 6
|
|
| 13.12.2011, 12:17 [ТС] | |
|
спасибо, может кто ещё что-то скинет?
0
|
|
|
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 6
|
|
| 13.12.2011, 12:26 [ТС] | |
|
я не могу разобраться... я же говорю, я можно сказать лошара...
мне не надо с открытием файлов... мне просто преобразовать строчный массив в двоичный код и обратно... больше ничего не надо... я просто не могу разобраться че где когда работает... половину слов не знаю))))
0
|
|
| 13.12.2011, 12:30 | |
|
Не по теме: Ну-с, тогда моё дело предложить тебе пару вариантов:
0
|
|
|
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 6
|
|
| 13.12.2011, 12:31 [ТС] | |
|
оставь здесь пока...
0
|
|
| 13.12.2011, 12:33 | |
|
Не по теме: ok... эт курсовая, или просто зачётная работа?
0
|
|
|
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 6
|
|
| 13.12.2011, 12:43 [ТС] | |
|
Курсовая... мне преподу нужно будет все по проге рассказать, а я только теорию разобрал, а в делфи я не силен...
0
|
|
| 13.12.2011, 12:43 | |
|
Помогаю со студенческими работами здесь
11
Сжатие файла методом Хаффмана
Сжатие данных методом LZW Сжатие Хаффмана Сжатие Хаффмана Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|