Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=10604166&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Wed Apr 13 14:13:15 2016
Кодировка: Windows-1251
есть ли архиватор для маленьких файлов?? - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 1
ovod
journeyman

Рег.: 09.12.2009
Сообщений: 56
Рейтинг: 60
  есть ли архиватор для маленьких файлов??
      06.12.2011 18:58
 

Всем привет!

Подскажите, есть ли готовые архиваторы с открытым кодом, которые будут эффективны для сжатия файла маленького размера (40 байт=400бит, 1 сетевой байт = 8 + 2 стопбита). Или есть алгоритм, который может позволить сжать такой файл, но чтобы гарантировано не было увеличения?

Спасибо!



Редактировал ovod (06.12.2011 19:44)
Zoobastik
Комок меха

Рег.: 18.10.2003
Сообщений: 7462
Из: За спиной
Рейтинг: 4345
  Re: есть ли архиватор для маленьких файлов?? [re: ovod]
      06.12.2011 19:19
-1

Если у всех файлов одинаковый размер, то склей все в один и zip-ом пожми. После распаковки - порежь.

А так, как ты себе представляешь, что пожмутся?
Если длина файла 400бит = 50байт, из них 1-5+байт уйдет на имена файлов, плюс сколько то на словарь данных.
Если файлов будет много, то пожмется и zip-ом. Если нет, то можно и обломиться.

ovod
journeyman

Рег.: 09.12.2009
Сообщений: 56
Рейтинг: 60
  Re: есть ли архиватор для маленьких файлов?? [re: Zoobastik]
      06.12.2011 19:27
 

Дело в том, что мне нужно сжать только один файл такого размера. zip таскает словарь, и не дает сжатие.

у данных нет каких-то гарантированных закономерностей, это координаты объектов.

1 сетевой байт = 10 бит (8 + 2 стопбита)


ayvango
ушастый

Рег.: 10.01.2006
Сообщений: 27732
Из: Воронеж
Рейтинг: 11832
  Re: есть ли архиватор для маленьких файлов?? [re: ovod]
      06.12.2011 19:31
1

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



Сеть темна и полна ужасов
ovod
journeyman

Рег.: 09.12.2009
Сообщений: 56
Рейтинг: 60
  Re: есть ли архиватор для маленьких файлов?? [re: ayvango]
      06.12.2011 19:58
 

классическое арифметическое я пробовал, стабильно увеличивает файл на пару байтов.


horror
гонобобель

Рег.: 30.09.2002
Сообщений: 3784
Рейтинг: 2137
  Re: есть ли архиватор для маленьких файлов?? [re: ovod]
      06.12.2011 20:01
 

Quote:

у данных нет каких-то гарантированных закономерностей, это координаты объектов



:grin:
координаты объектов и являются некоторой закономерностью, как лучше запаковать данные
вот у нас 40 байт = 320 битов. есть уверенность, что все биты реально будут использоваться? каково среднее кол-во использования каждого бита? если все биты будут использоваться, то сжатия скорее всего не будет (скорее наоборот), можно метнуться в сторону адаптивных алгоритмов (логика строится на предыдущих пакетах, типа кодеков), но я сомневаюсь, что реально нужно соваться в такие дебри

Vlad
addict

Рег.: 18.09.2004
Сообщений: 446
Рейтинг: 236
  Re: есть ли архиватор для маленьких файлов?? [re: ovod]
      06.12.2011 21:15
1

Чтобы гарантированно не было увеличения используй тождественное преобразование.

А если серьезно - все архиваторы заточены под какие-то виды данных. Их они жмут, а все остальное - раздувают (пусть немножко). Поэтому пока ты не определишься, на какого рода избыточности в твоих данных можно сыграть, вопрос не имеет особого смысла.

Если координаты - то в каком формате, что можно сказать о взаимном расположении объектов, и т.п.?

Fj_
Carpal Tunnel

Рег.: 12.09.2004
Сообщений: 8795
Рейтинг: 3287
  Re: есть ли архиватор для маленьких файлов?? [re: ovod]
      07.12.2011 02:28
9

Во-первых, "чтобы гарантировано не было увеличения" не получится, как тебе попытался намекнуть Влад: хоть один бит (типа, uncompressed flag) но придется добавить.

Алсо, я затрудняюсь представить ситуацию, в которой тебе было бы полезно скомпрессить ~40 байт, это же и так очень мало! И не вижу, как это возможно, по крайней мере если не знать внутренней структуры. Чисто адаптивный алгоритм не успеет настроиться, добавление какого-нибудь словаря тут же сожрет львиную часть посылки...

Если ты знаешь структуру, то есть варианты. Для начала, раз ты знаешь, что там есть старт-стоп биты, можешь их смело выкинуть, 20% профита сразу! Потом, ну, стандартная идея: с одной стороны, если там координаты, и они все приблизительно похожи, то можно их декодировать в координаты и дальше хранить дельты. Типа, первую координату сохраняешь как есть, дальше сохраняешь разницы между координатами. Это даст тебе данные в которых большинство значений сравнительно маленькие.

С другой стороны, делаешь кодировку в которой маленькие значения занимают мало бит - http://en.wikipedia.org/wiki/Prefix_code, дальше тебе нужно посмотреть на типичные данные и прикинуть что лучше - выбрать какую-то одну кодировку которая их хорошо жмет, или может быть несколько таких кодировок и добавить селектор вначале. Как я сказал выше, стандартные подходы с адаптивным энкодером (который вначале сжирает немножко некодированных данных и строит статистику, потом раскодирует еще немножко данных ей и строит новую статистику, и так далее) или с сохранением словаря, не подходят, слишком маленький размер исходных данных.

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

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

Еще можешь почитать вот это: http://fgiesen.wordpress.com/2011/01/24/x86-code-compression..., но оно практически наверняка не подойдет, разве что в качестве источника вдохновения.



The data is the error (c)IIS FTP Server.
ovod
journeyman

Рег.: 09.12.2009
Сообщений: 56
Рейтинг: 60
  Re: есть ли архиватор для маленьких файлов?? [re: Fj_]
      07.12.2011 18:06
 


   FJ , спасибо.

Fj_
Carpal Tunnel

Рег.: 12.09.2004
Сообщений: 8795
Рейтинг: 3287
  Re: есть ли архиватор для маленьких файлов?? [re: ovod]
      08.12.2011 01:46
6

Вот еще немножко идей:

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

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

Да, и в конце концов, если действительно соберешься это писать и тестить с разными вариантами настроек (ну, там, какой префиксный код выбрать, как предиктор работает, все такое), то это тоже следует делать по Науке! А именно: набираешь типичных данных и делишь их на

1) 80% training set
2) 20% testing set

Потом подбираешь параметры, которые дают наилучшее сжатие на training set, и смотришь, действительно ли эти параметры позволяют хорошо сжать и testing set. Если эффективность приблизительно одинаковая, то все отлично, если нет, то это означает, что у тебя оказалось достаточно параметров кодирования чтобы невзначай удалось закодировать в них часть информации из training set, это называется overfitting. Тогда нужно набирать еще в несколько раз больше данных, либо заняться особой черной магией. Главное что ни в коем случае нельзя использовать testing set для выбора параметров, он должен быть чисто для проверки.



The data is the error (c)IIS FTP Server.
KOHTPA
Carpal Tunnel

Рег.: 22.01.2003
Сообщений: 33647
Рейтинг: 2374
  Re: есть ли архиватор для маленьких файлов?? [re: Fj_]
      15.12.2011 03:51
 

> я затрудняюсь представить ситуацию, в которой тебе было бы
> полезно скомпрессить ~40 байт, это же и так очень мало!

RFC 1035 (STD 0013), 4.1.4. Message compression.


---
"Narrowness of experience leads to narrowness of imagination."

DeeMon

Рег.: 28.03.2004
Сообщений: 1746
Из: Siam gulf
Рейтинг: 3029
  Re: есть ли архиватор для маленьких файлов?? [re: KOHTPA]
      15.12.2011 09:24
 

Это ж примитивнейший вариант LZ. Для координат, которые не повторяются в точности, он ничего не даст.

KOHTPA
Carpal Tunnel

Рег.: 22.01.2003
Сообщений: 33647
Рейтинг: 2374
  Re: есть ли архиватор для маленьких файлов?? [re: DeeMon]
      15.12.2011 13:37
 

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


---
"Не надо читать много книг."

Страницы: 1

Technical >> Development (Archive)

Дополнительная информация
0 зарегистрированных и 0 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в