Какие типы файлов можно сжать с помощью кодирования Хаффмана?

Я знаю, что мы используем кодирование Хаффмана для сжатия файлов .txt, что я хочу знать, какие другие расширения можно сжать с помощью кодирования Хаффмана, например, можем ли мы сжать (.pdf, .Xls, . Jpg, .Gif, .Mp4) с использованием кода Хаффмана?


person Ali Dena    schedule 25.06.2020    source источник


Ответы (1)


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

Однако на практике кодирование Хаффмана, скорее всего, не будет хорошо работать для многих других форматов по ряду причин. Например, многие форматы файлов (PDF, MP4, JPG и т. д.) уже используют какой-либо метод сжатия для уменьшения занимаемого ими пространства, поэтому использование вторичного сжатия вряд ли что-то даст. Во-вторых, кодирование Хаффмана основано на предположении, что каждый видимый символ выбирается из некоторого фиксированного распределения вероятностей независимо от любого другого символа, и, следовательно, не работает, когда существуют корреляции между тем, какие символы и где появляются. Например, необработанное растровое изображение, вероятно, будет иметь корреляцию между цветами пикселей и их соседними пикселями, но кодирование Хаффмана не может использовать это в своих интересах.

При этом кодирование Хаффмана часто используется как один из многих шагов в различных алгоритмах кодирования. Например, если мне не изменяет память, bzip2 работает, разбивая входные данные на блоки, используя преобразование Берроуза-Уилера для каждого блока, затем используя кодирование с перемещением вперед, затем кодирование длин серий и, наконец, используя кодирование Хаффмана в самый конец.

Надеюсь это поможет!

person templatetypedef    schedule 25.06.2020