каковы реальные применения кодирования хаффмана?

<p>мне говорят, что кодирование хаффмана используется<em> в качестве алгоритма сжатия без потерь данных </em>, но мне также говорят, что реальное программное обеспечение для сжатия данных<em> нет </em>использует кодирование хаффмана, потому что если ключи не распределены достаточно децентрализовано, сжатые файл может быть даже больше, чем оригинальный файл.</p><p>это заставляет меня задуматься, есть ли какое-нибудь реальное применение кодирования хаффмана?</p>

<p>хаффман широко используется во всех основных форматах сжатия, которые могут вам встретиться - от gzip, pkzip (winzip и т.д.) и bzip2 до форматов изображений, таких как jpeg и png.</p><p>все схемы сжатия имеют патологические наборы данных, которые не могут быть по существу сжаты; форматы архивов, которые я перечислил выше, просто хранят такие файлы в несжатом виде при их обнаружении.</p><p>новые <a href="http://en.wikipedia.org/wiki/arithmetic\_coding">арифметические и диапазонные кодировки</a> схемы часто избегают из-за <a href="http://en.wikipedia.org/wiki/arithmetic\_coding#us\_patents\_on\_arithmetic\_coding">патентных проблем</a> , означая, что хаффман остается рабочей лошадкой в индустрии сжатия.</p>

<p>смотрите <a href="http://en.wikipedia.org/wiki/huffman\_coding#applications">википедия</a> статья на эту тему:</p><blockquote> <p>сегодня кодирование хаффмана часто используется в качестве «бэк-энда» для какого-либо другого метода сжатия. deflate (алгоритм pkzip) и мультимедийные кодеки, такие как jpeg и mp3, имеют внешнюю модель и квантование с последующим кодированием хаффмана.</p> </blockquote>

<p>существует довольно много реальных приложений кодирования хаффмана. zip, пожалуй, наиболее широко используемый инструмент сжатия, использующий кодировку huffman в качестве основы. последний из наиболее эффективных алгоритмов сжатия без потерь, brotli compression, выпущенный google в прошлом месяце, также использует кодирование хаффмана. кроме того, brotli также использует lz77 и несколько других фундаментальных алгоритмов сжатия без потерь. обратитесь к <a href="http://github.com/google/brotli">бротли.</a> </p>

<p>если рассматривать алгоритмы сжатия, то для каждого из них часто есть свои преимущества и недостатки. это природа сжатия, которая, учитывая набор входных данных, существует лучшие и худшие алгоритмы сжатия для этих данных.</p><p>хаффман действительно очень хорош в некоторых вещах. в первую очередь это касается данных, которые многократно повторяют порядок и содержат подмножество символьного пространства. например, текстовые файлы на английском языке. английский язык имеет тенденцию иметь те же самые буквы, сопровождаемые теми же самыми другими буквами.</p><p>если ваш профессор или книга создали у вас впечатление, что хаффман не используется, они ошибаются. например, почти все сообщения в интернете и из интернета в какой-то момент кодируются хаффманом. (несколько протоколов связи используют его.) большинство файлов изображений (jpeg) кодируются хаффманом. большинство музыкальных файлов (mp3s) кодируются хаффманом. есть много других примеров.</p><p>одна из причин, по которой хаффман используется, заключается в том, что его можно «обнаружить» с помощью немного другого алгоритма, называемого адаптивным хаффманом. когда вы читаете файл, вы изучаете код хаффмана и «сжимаете по ходу». это упрощенный обзор, но вы поняли идею.</p><p>чтобы решить, как использовать лучший алгоритм для решения проблемной ситуации, zip-файлы позволяют использовать несколько различных сжатий в зависимости от того, что лучше для данного файла.</p>

<p>код хаффмана используется для преобразования кодов фиксированной длины в коды переменной длины, что приводит к сжатию без потерь. коды переменной длины могут быть дополнительно сжаты с использованием методов jpeg и mpeg для получения желаемой степени сжатия.</p>