Можно ли сжимать бинарные файлы с помощью кодировки Хаффмана? - PullRequest
0 голосов
/ 22 июня 2019

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

Ответы [ 2 ]

1 голос
/ 22 июня 2019

Что касается механизма чтения данных из входного файла и записи данных в выходной файл, нет никаких препятствий для применения алгоритма кодирования Хаффмана к двоичному файлу.Кто-то просто читает байты, оперирует ими и записывает байты.

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

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

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

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

0 голосов
/ 22 июня 2019

«Текстовый файл» - это просто двоичный файл с определенной интерпретацией, который программное обеспечение будет отображать в удобочитаемом виде. Сжимаемость любого контента с использованием кодирования Хаффмана зависит от частотного распределения конкретных значений байтов (или, возможно, других размеров слова).

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

...