2010-02-04 3 views
21

Мне сказали, что кодировка Хаффмана используется как алгоритм сжатия данных без потерь, но мне также говорят, что настоящие программы для сжатия данных делают не используют кодировку Хаффмана, поскольку если ключи не распределены достаточно децентрализованными, сжатый файл может быть даже больше, чем файл orignal.Каковы реальные приложения кодирования huffman?

Это оставляет мне интересно, есть ли какие-либо реальные приложения кодирования Хаффмана?

+2

кто-то говорит вам, свиньи. – Will

+1

Честно говоря, «есть ли какое-то реальное сжатие без Хаффмана?» было бы более интересным вопросом (есть, но было бы более интересно) увидеть успех Real-World [TM] кодирования/сжатия Хаффмана и Адаптивного Хаффмана. Тот, кто сказал вам, что «настоящее программное обеспечение для сжатия данных не использует хаффмана», не является правильным в его собственном сознании. – SyntaxT3rr0r

ответ

22

Хаффман широко используются во всех основных форматах сжатия, которые вы можете столкнуться - от GZIP, PKZIP (WinZip и т.д.) и BZIP2, в форматы изображений, такие как JPEG и PNG.

Все схемы сжатия имеют патологические наборы данных, которые не могут быть существенно сжаты; в архивных форматах, перечисленных выше, просто «хранить» такие файлы несжатые, когда они встречаются.

Новые схемы arithmetic and range coding часто избегают из-за patent issues, то есть Хаффман остается рабом лошади промышленности сжатия.

+1

Итак, вы имеете в виду, что huffman на самом деле является «основой», если не «ядром» индустрии сжатия? – Jichao

+1

Абсолютно. Это точно, что я имею в виду. – Will

+18

Да, ваш вопрос был как просить «Дайте мне пример автомобиля, сделанного из стали». – Hogan

4

См Wikipedia статью на тему:

кодирование Хаффмана сегодня часто используется в качестве «фоновым» в какой-то другой метод сжатия. DEFLATE (алгоритм PKZIP) и мультимедийные кодеки, такие как JPEG и MP3, имеют внешнюю модель и квантование, за которыми следует кодирование Хаффмана.

+3

Что такое «back-end»? Что такое «front-end»? – Jichao

+1

@jcyang: это всего лишь две разные части системы. Возможно, обратная сторона ближе к написанию файла и front-end, вероятно, около того, где он читает файл. – Hogan

+1

«Бэкэнд» означает кодирование значений, которые были предварительно предварительно обработаны и, возможно, сжаты другим алгоритмом. Например, DEFLATE использует LZ77 для кодирования повторяющихся последовательностей, прежде чем Хаффман будет кодировать эти символы не в последовательности. – Will

2

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

Хаффман действительно, действительно хорош в некоторых вещах. Особенно заметно данные, которые многократно повторяют порядок и содержат подмножество пространства символов. Например, текстовые файлы на английском языке. Английский язык имеет те же буквы, что и другие буквы.

Если ваш профессор или книга дали вам впечатление, что Хаффман не используется, они ошибаются. Например, почти все коммуникации с и из Интернета в какой-то момент закодированы Хаффманом. (Для этого используется несколько протоколов связи.) Большинство файлов изображений (jpegs) закодированы в кодировке Хаффмана. Большинство музыкальных файлов (mp3) кодируются Хаффманом. Есть много других примеров.

Одна из причин, по которой используется Хаффман, заключается в том, что ее можно «обнаружить» с помощью немного другого алгоритма, называемого адаптивным Хаффманом. Когда вы читаете файл, вы узнаете код Хаффмана и «сжимаете, когда идете». Это упрощенный обзор, но вы получаете эту идею.

Чтобы решить проблему с использованием лучшего алгоритма для проблемы ситуации, zip-файлы позволяют использовать несколько различных сжатий в зависимости от того, какой лучший для данного файла.

+0

Хаффман не «обнаружен» - это не поток. Существуют «адаптивные» вариации Хаффмана, основанные на потоке, но они достаточно разные, и никто не предполагал, что вы имели в виду адаптивную вариацию, если бы вы просто сказали «Хаффман». – Will

+1

Какие интернет-протоколы используют его? – Will

+0

Интернет-протокол был неправильным термином - протоколы связи - это то, что я имел в виду. Изменение. – Hogan

0

Код Huffman используется для преобразования кодов фиксированной длины в коды длины переменной, что приводит к сжатию без потерь. Коды переменной длины могут быть дополнительно сжаты с использованием технологий JPEG и MPEG для получения желаемой степени сжатия.

3

Существует довольно много реальных приложений кодирования Хаффмана. ZIP - это, пожалуй, самый широко используемый инструмент сжатия, который использует Huffman Encoding в качестве основы. Последний из наиболее эффективных алгоритмов сжатия без потерь, Brotli Compression, выпущенный Google в прошлом месяце, также использует кодировку Хаффмана.Кроме того, Бротли также использует LZ77 и несколько других алгоритмов сжатия без потерь. См. Brotli.

Смежные вопросы