Эвристический подход всегда будет включать некоторые ложные срабатывания и некоторые ложные отрицания.
Возможный размер сжатого файла будет зависеть от ряда факторов, некоторые из которых невозможно узнать без запуска самого процесса сжатия..
Zip64 позволяет использовать множество различных форматов сжатия, таких как bzip2, LZMA и т. Д. Даже формат сжатия может выполнять сжатие по-разному в зависимости от данных, подлежащих сжатию.Например, bzip2 может использовать Burrows-Wheeler, кодирование длин серий и Хаффмана среди других.Возможный размер файла будет зависеть от статистических свойств сжимаемых данных.
Например, возьмем Хаффмана;размер таблицы символов зависит от того, насколько случайно распределено содержимое файла.
Можно продолжить и попытаться профилировать различные типы данных, сериализованные двоичные данные, текст, изображения и т. д., и каждый из них будет иметьдругое нормальное распределение окончательного сжатого размера.
Если вам действительно нужно экономить время, выполняя процесс только один раз, за исключением создания очень большой базы данных и использования экспертной системы на основе правил или системы, основанной на байесовскомТеорема, нет реального 100% подхода к этой проблеме.
Вы также можете попробовать сэмплировать блоки файла через случайные интервалы и сжимать эту выборку, а затем линейно интерполировать в зависимости от размера файла.