Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.07.2008, 20:22
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
Злость LZMA Парадокс, или ...

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

Вопрос состоит в следующем, вообще возможно ли найти золотую середину чтобы нормально (достаточно нормально) сжимала разные типы файлов (графика, текст, приложение и т.д ), а то чудь-чуть не могу WinRAR переплюнуть
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 07.07.2008 в 20:32.
Ответить с цитированием
  #2  
Старый 08.07.2008, 10:55
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Тут есть один нюанс - WinRar использует кучу настроек, например там можно галочку поставить "Использовать мультимедиа сжатие". Т.е. пользователь сам выставляет настройки. Так нужно делать и у тебя. Если захочет пользователь сжимать графику, то пусть размер словаря уменьшается. Кстати в WinRar есть выпадающий список с размерами словаря.
А как найти золотую середину (т.е. настройки по умолчанию). Берешь много разных файлов и сжимаешь с разными параметрами. А потом путем анализа вычисляешь оптимальные для всех типов файлов настройки.
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #3  
Старый 08.07.2008, 13:27
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Тогда еще один вопрос.
Допустим программа определила, что будут сжиматься текстовики, а на самом деле это графика с другим расширением, тогда по видимому необходимо определять файл по сигнатуре?
--------------------
А насчет идеи с комком разных файлов и аго анализа, большое спасибо, изначально я делал просто, сжимал разные файлы по отдельности и потом никак не мог замешать результаты между собой
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 10.07.2008, 11:06
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию LZMA

Как это понять, чем меньше словарь, тем лучше сжатие?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 10.07.2008, 16:13
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Я наверное неправильно выразился.
Суть любого метода сжатия заключается в построении бинарного дерева и составления уже на его основе словаря. Так вот, в любом случае размер сжатого файла включает в себя размер заголовка + размер словаря + размер сжатых данных. Поскольку графические данные сравнительно плохо сжимаются стандартными методами (для них есть специальные алгоритмы, например тот же JPG), то из-за увеличения словаря происходит увеличение архивного файла. В других случаях, когда сжимаются данные других типов, при увеличении размера словаря, уменьшается размер сжатых данных. Однако может быть такое, что в случае максимального сжатия размер архивного файла может быть больше чем размер этого же архивного файла, но с меньшей степенью сжатия. Поэтому во многих архиваторах, при создании нового архива, указывается будет ли применяться сжатие мультимедиа-данных. В таком случае размер архива будет минимальным, поскольку такая составляющая как словарь, будет иметь минимальный размер.
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #6  
Старый 11.07.2008, 10:45
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну в общем у меня программа файлы по отделности жмет сильнее WinRAR'a а группу RAR жмет на сто байт сильнее чем моя программа. У него другая структура файла?
у меня шапочка файла в таком роде
Код:
Type TFileHead=Packed Record
    Attr:Word;
    CRC:LongWord;
    Size:LongWord;
    PackedSize:LongWord;
    FileCreateDate:TDateTime;
    FileModifyDate:TDateTime;
    FileOpenDate:TDateTime;
    LongFileName:WideString;
  End;
и потом запись в файл идет друг за другом.
Такой заголовок большой наверное? но он у меня сжиматеся.
Как интерестно в RAR'e сделано, наверняка идет запись шапки, потом запись файла ?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 11.07.2008, 11:27
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Заголовок здесь не причем. Просто у winrar алго сжатия лучше. Он даже не жмет заголовки. Весьма возможно, что он делает непрерывный архив - т.е. все файлы представляются одним потоком и жмутся в таком виде. Тогда словарь получается 1 на всех.
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #8  
Старый 11.07.2008, 13:23
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Но опять если непрерывный архив с общим словарем, в таком случае не факт, что он сильно сожмет.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #9  
Старый 11.07.2008, 13:30
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

В 7зип спользуется еще размер блока и размер слова, что они дают?
Ну с блоком понятно, а размер слова?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 11.07.2008 в 13:48.
Ответить с цитированием
  #10  
Старый 11.07.2008, 14:07
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Я понял свою ошибку!!! у меня размером словаря являлся индекс по листу, я забыл сделать 1 shl Index, так что словари у меня устанавливались неверно. Сейчас у меня программа на ~118 Кб обогнала WinRAR при сжатии BMP.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:18.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter