Название: Посчитать примерный размер архива Отправлено: ecspertiza от Март 07, 2013, 09:54 Собственно все в заголовке, нужно перед архивацией прикинуть, хотя бы примерно, сколько будет весить архив. Кто знает есть ли алгоритм ?
Название: Re: Посчитать примерный размер архива Отправлено: Bepec от Март 07, 2013, 10:11 Помоему никак. Там жеж всё зависит от содержимого файлов вроде. Файлы заполненные "АААА" сожмутся на 95 %.
Название: Re: Посчитать примерный размер архива Отправлено: kuzulis от Март 07, 2013, 10:24 Ну, заархивировать куда-нить в файл в виртуальной/оперативной памяти (или, может быть tmpfs или как там),
посчитать сколько оно получилось по размеру. Если много - то освободить, если нормуль - то скинуть содержимое в файл на ЖД. :) Название: Re: Посчитать примерный размер архива Отправлено: Igors от Март 07, 2013, 10:34 Собственно все в заголовке, нужно перед архивацией прикинуть, хотя бы примерно, сколько будет весить архив. Кто знает есть ли алгоритм ? Из каждого файла взять кусок (примерно 8K), сжать его в памяти и посмотреть что получилось. Название: Re: Посчитать примерный размер архива Отправлено: navrocky от Март 07, 2013, 13:02 На 0.5 умножай размер. А если серьёзно, то можно по типам файлов определить их сжимаемость. Предположим, мы знаем, что exe жмутся в 2 раза, jpg, png, архивы, odt не жмутся, txt, html - жмутся хорошо раз в 5.
Вот пройдись по файлам и просчитай. Название: Re: Посчитать примерный размер архива Отправлено: Bepec от Март 07, 2013, 13:04 К тому же следует понимать, что некоторые типы данных наоборот разбухнут :) Помнится какой-то dat файл зиповал - вышло на 20 мб больше, чем сам файл :D
Название: Re: Посчитать примерный размер архива Отправлено: ecspertiza от Март 07, 2013, 13:19 Я почему то надеялся на то ,что есть алгоритм который может это посчитать. Жать в оперативную память ,а потом проверять размер не очень хорошо, в этом случае мне проще изменить логику программы.
Пока больше всего подходит идея Igors. Если файл psd у меня жмется примерно на 71% то алгоритм показывает 78, да погрешность есть, но это можно учитывать. Умножать на 0.5, тоже не вариант хотя бы по тому ,что некоторые файлы так не жмутся, а определять % сжатия для каждого формата ну это же можно и год за компом провести :) Название: Re: Посчитать примерный размер архива Отправлено: Igors от Март 07, 2013, 14:12 Простой но интересный тест: создать 1000 float с помощью rand() и записать в двоичный файл. Практически не жмется - потому что шум "белый". Впрочем и "розовый" тоже не очень
Название: Re: Посчитать примерный размер архива Отправлено: schmidt от Март 08, 2013, 23:04 Цитировать Собственно все в заголовке, нужно перед архивацией прикинуть, хотя бы примерно, сколько будет весить архив. Кто знает есть ли алгоритм ? Собственно, такого алгоритма нет ;) Вся "беда" в том что: 1. Разных алгоритмов сжатия существует бесчисленное множество, достаточно взглянуть хотя бы на подобные тесты: http://www.compression.ru/arctest/act/act-text.htm 2. Результат работы зависит непосредственно от самих данных. Посмотрите, для примера, алгоритм Хаффмана: http://habrahabr.ru/post/144200/. Вообще вот здесь http://www.compression.ru/arctest/descript/comp-hist.htm лежит очень занятный обзор техник сжатия данных. Теоретически возможно приблизительно определить, пожат ли файл архиватором/протектором, рассчитав его энтропию - в частности такой трюк реализован в утилите PeID, предназначенной для определения конкретного протектора, которым был обработан EXE-файл. Однако, это лишь приблизительная оценка. |