Сжатие файла с использованием кодирования Хаффмана, когда все символы имеют одинаковые повторения? - PullRequest
0 голосов
/ 09 ноября 2018

Итак, я реализовал сжатие Хаффмана для множества файлов разных типов (.jpg, .txt, .docx), и я часто замечал, что иногда сжатый файл иногда почти совпадает с исходным файлом ( пример: 251,339kb -> 250,917kb (без заголовка!)) Я почти уверен, что мой код надежен, хотя я не уверен, правильно это или нет. То, что я заметил, это то, что частоты символов очень похожи, поэтому, например, у меня будет 10 символов, которые все имеют, например, 65 повторений, а затем еще 10 символов, которые имеют 66 повторений, а затем еще 10 символов, которые имеют 67 повторения и т. д. и т. д. И поскольку файлы имеют большой размер, сжатый код представления символов в конечном итоге имеет тот же размер, что и оригинал, или даже больше (9 бит). Это нормально при сжатии с использованием huffman?

1 Ответ

0 голосов
/ 14 декабря 2018

При кодировании с помощью Huffman разделите файл на более мелкие куски под обложками. Идея состоит в том, что более мелкие фрагменты будут иметь больший уклон, чем гигантский файл, который усредняет все. Например, в одном чанке может быть много 0х00. Другой кусок может иметь 0xFF и так далее. Затем сжатие каждого куска с помощью алгоритма Хаффмана позволит извлечь выгоду из этого. Конечно, если чанки слишком малы, тогда таблица кодов Хаффмана будет составлять большую часть сжатого чанка, и вы потеряете преимущества чанкинга. В случае Deflate кодовые таблицы имеют порядок 50-100 байт.

Конечно, как прокомментировали другие респонденты, если ваши исходные файлы уже сжаты (JPEG и т. Д.), Вы не найдете каких-либо искажений или избыточностей, как бы вы ни разбили их на части.

...