Расчет размера теоретического текстового файла

Я пишу статью о демографических прогнозах Бюро переписи населения до 2060 года, которая в несжатом виде содержит файл CSV размером 3,3 МБ.

Файл состоит из 539 781 значений, каждое из которых состоит из 5-7 цифр и занимает 3 455 372 символа. Когда я распаковываю файл, он уменьшается до 1550063 байта или 1,47 МБ.

Я хочу быть в состоянии правдиво заявить, что он будет помещаться на 3,5-дюймовую дискету, максимальная емкость 1,44 МБ. Это просто ориентир, а не совет пользователю, который требует инструкций о том, как это сделать.

Есть ли способ рассчитать теоретический размер текстового файла на основе количества символов выше? Если бы у нас на самом деле была 3,5-дюймовая дискета и привод для нее, можно ли было бы поместить этот файл на диск без потери информации? Спасибо!

2 ответа

Решение

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

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

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

Если вы хотите сказать, что он помещается на дискету объемом 1,44 МБ, то просто докажите это лучшим компрессором. Попробуйте 7-Zip или xz (в зависимости от вашей платформы). Вы достаточно близко, что я уверен, что добьется цели. (Вы использовали gzip -9?)

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

Как уже отмечалось, нельзя рассчитать теоретически лучшее сжатие. Просто используйте лучшие компрессоры, чтобы получить оценку.

Обновить:

Скачал это. xz сжал его до 1177180 байт. Так что да, это подходит.

Другие вопросы по тегам