![]() 6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
|
||||||
Алгоритм Хаффмана16.12.2014, 01:35. Показов 7850. Ответов 9
Метки нет Все метки)
(
Возможно и наболевшая тема на форуме, но всё же есть реализация алгоритма Хаффмана.
Допустим, у меня в файле есть следующая строка: Также отмечу, что при компиляции с данным файлом, после декодировки я получаю в консоли то же, что и было: Код: Кликните здесь для просмотра всего текста
0
|
16.12.2014, 01:35 | |
Ответы с готовыми решениями:
9
Алгоритм Хаффмана Алгоритм Хаффмана Алгоритм Хаффмана |
16.12.2014, 01:57 | ||||||
Берем простенькую реализацию static Huffman и смотрим:
1
|
![]() 6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
|
|
16.12.2014, 02:39 [ТС] | |
прям простенькую
для Вас, наверное) но судя по Вашим: Добавлено через 7 минут и ведь дальше в коде идёт обратный проход по дереву и восстанавливаются символы Добавлено через 20 минут т.е., как я понимаю, после декодирования файла, он должен иметь аналогичный, с исходным файлом, текст.
0
|
16.12.2014, 02:44 | |
Что понимается под: "преобразовать в 0 и 1"? У вас и так двоичный файл. И зачем вам "0 и 1"?
К слову, в код ваш не всматривался, но vector, очевидно, неподходящий ADT для Huffman. Посмотрите у Mark Nelson - "Priority Queues and the STL". Добавлено через 1 минуту Для lossless data compression - идентичный.
1
|
![]() 6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
|
|
16.12.2014, 02:53 [ТС] | |
я просто думал, что на этапе кодировки в файле должны появиться 0 и 1.
но, допустим, я хочу открыть этот файл, обработанный алгоритмом и прочесть его, как я могу это сделать, если для меня это всего лишь набор символов? Добавлено через 46 секунд что такое ADT? Добавлено через 2 минуты
0
|
16.12.2014, 03:00 | |
![]() Решение
Единица хранения информации в системе - байт. То есть, поток кодов разбивается на байты (границы кодов игнорируются). Эти байты вы и видите в программах просмотра.
Можете сравнить с транслитом или UTF-8, все то же самое.
1
|
![]() 6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
|
|
16.12.2014, 03:09 [ТС] | |
спасибо, понял
это как, допустим, в читалках на ПК, телефоне - декодер в них правильно предоставит мне эти файлы, да? на примере в чём конкретно суть префиксного свойства? что в нём делает код однозначно декодируемым? Добавлено через 1 минуту просто, прочитав определение на википедии, я ещё больше запутался: Кликните здесь для просмотра всего текста
Если промежутков или других знаков препинания между кодовыми комбинациями нет, то для однозначного декодирования комбинации 111011101 ни одна из кодовых комбинаций не может быть представлена перечисленными вариантами (префиксами). Код называется префиксным, если ни одна из его комбинаций не является префиксом другой комбинации того же кода. Часть кодовой комбинации, которая дополняет префикс до самой комбинации, называется суффиксом. Префиксные коды наглядно могут быть представлены с помощью кодовых деревьев. Если ни один узел кодового дерева не является вершиной данного кода, то он обладает свойствами префикса. Узлы дерева, которые не соединяются с другими, называются конечными. Комбинации, которые им соответствуют, являются кодовыми комбинациями префиксного кода.
0
|
16.12.2014, 03:24 | |
Если вы разделяете модель: метод сжатия и словарь. Иначе, это будет разговор на разных языках.
Prefix code "Сжатие" - это простейший вариант трансляции. "На пальцах", кодовые слова образуют дерево - каждый путь к листу уникален. Грамматика тривиальна: предпросмотра или учета контекста не требуется - как только прочитаны все биты кода, он может быть декодирован.
1
|
![]() 6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
|
|
16.12.2014, 03:29 [ТС] | |
спасибо за объяснение
0
|
16.12.2014, 03:47 | |
![]() Решение
IMHO, это не поддается пониманию. Читайте в оригинале. Вот здесь, кажется, было популярно: М.Н.Аршинов, Л.Е.Садовский "КОДЫ И МАТЕМАТИКА (РАССКАЗЫ О КОДИРОВАНИИ)", М.: Наука, 1983 (Библиотечка «Квант». Вып. 30)
Добавлено через 17 минут Не уверен, что понял вопрос. Кодер и декодер разделяют модель (можете думать о ней, как о двуязычном словаре: "symbol <--> code"). В статических методах словарь строится заранее и не изменяется, в динамических - обновляется по мере накопления статистики. При кодировании: кодер "смотрит" в словарь и взамен каждого символа, записывает в выходной поток его код. Декодирование - обратно. Symbol - это один символ (атом) входного алфавита. Это может быть байт, слово натурального языка, обусловленная фраза итд. В простейшем случае, все атомы имеют равный битовый размер (обычно, 4, 8 или 16 бит). Чтение и запись поточны - символ за символом. Если для равномерного кода возможен произвольный доступ к символу по индексу, то для неравномерного, позиция символа неизвестна, пока не прочитаны все ему предшествующие.
1
|
16.12.2014, 03:47 | |
Помогаю со студенческими работами здесь
10
Канонический алгоритм Хаффмана Алгоритм Хаффмана с записью в файл Оптимизация расшифровки файла | алгоритм хаффмана Алгоритм Хаффмана, реализация через структуры Реализовать алгоритм оптимального кодирования Хаффмана Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
MVC фреймворк в PHP
Jason-Webb 19.04.2025
Архитектурный паттерн Model-View-Controller (MVC) – это не просто модный термин из мира веб-разработки. Для PHP-программистов это фундаментальный подход к организации кода, который радикально меняет. . .
|
Dictionary Comprehensions в Python
py-thonny 19.04.2025
Python славится своей выразительностью и лаконичностью, что позволяет писать чистый и понятный код. Среди множества синтаксических конструкций языка особое место занимают словарные включения. . .
|
Шаблоны и протоколы для создания устойчивых микросервисов
ArchitectMsa 19.04.2025
Микросервисы — архитектурный подход, разбивающий сложные приложения на небольшие, независимые компоненты. Вместо монолитного гиганта, система превращается в созвездие небольших взаимодействующих. . .
|
Изменяемые и неизменяемые типы в Python
py-thonny 19.04.2025
Python славится своей гибкостью и интуитивной понятностью, а одна из главных его особенностей — это система типов данных. В этом языке все, включая числа, строки, функции и даже классы, является. . .
|
Интеграция Hangfire с RabbitMQ в проектах C#.NET
stackOverflow 18.04.2025
Разработка современных . NET-приложений часто требует выполнения задач "за кулисами". Это может быть отправка email-уведомлений, генерация отчётов, обработка загруженных файлов или синхронизация. . .
|
Построение эффективных запросов в микросервисной архитектуре: Стратегии и практики
ArchitectMsa 18.04.2025
Микросервисная архитектура принесла с собой много преимуществ — возможность независимого масштабирования сервисов, технологическую гибкость и четкое разграничение ответственности. Но как часто бывает. . .
|
Префабы в Unity: Использование, хранение, управление
GameUnited 18.04.2025
Префабы — один из краеугольных элементов разработки игр в Unity, представляющий собой шаблоны объектов, которые можно многократно использовать в различных сценах. Они позволяют создавать составные. . .
|
RabbitMQ как шина данных в интеграционных решениях на C# (с MassTransit)
stackOverflow 18.04.2025
Современный бизнес опирается на множество специализированных программных систем, каждая из которых заточена под решение конкретных задач. CRM управляет отношениями с клиентами, ERP контролирует. . .
|
Типы в TypeScript
run.dev 18.04.2025
TypeScript представляет собой мощное расширение JavaScript, которое добавляет статическую типизацию в этот динамический язык. В JavaScript, где переменная может свободно менять тип в процессе. . .
|
Погружение в Kafka: Концепции и примеры на C# с ASP.NET Core
stackOverflow 18.04.2025
Apache Kafka изменила подход к обработке данных в распределенных системах. Эта платформа потоковой передачи данных выходит далеко за рамки обычной шины сообщений, предлагая мощные возможности,. . .
|