|
Сообщения без ответов | Активные темы
| Автор |
Сообщение |
|
Булат
|
Заголовок сообщения: Dict - революция в мире архиваторов! Добавлено: Пн дек 04, 2006 22:59 |
|
 |
| Завсегдатай |
Зарегистрирован: Пн янв 17, 2005 16:05 Сообщения: 419
|
В этой статье описан алгоритм работы моего словарного препроцессора DICT, достигающего значительно лучших результатов, чем LIPT и XML-WRT, и выводящего сжатие текстов на принципиально новый уровень. Для начала приведу результаты тестов (столбцы - метод сжатия, размер архива, время упаковки, время распаковки):
Код: ghc-src (исходные тексты), 28.183.463 bytes
lzma:16mb:max 4.104 kb 121 secs 1.69 secs dict+lzma 3.878 kb 55 secs 2.18 secs
ppmd:o16:192mb 3.922 kb 34 secs 34 secs dict+lzp+ppmd 3.812 kb 36 secs 31 secs
ppmonstr:o16:160m 3.456 kb 350 secs dict+lzp+ppmonstr 3.300 kb 119 secs
для сравнения: xml+lzma 4.175 kb 52 secs 4.5 secs ppmvc 4.012 kb 40 secs 39 secs xml+ppmvc 3.968 kb 41 secs 36 secs lzp+ppmd 3.892 kb 36 secs 37 secs uharc -mx -md32m 3.580 kb 92 secs xml+paq 3.267 kb 373 secs
А теперь файл, благоприятствующий xml-wrt и ppmvc - хорошо сжимающаяся документация в html формате: Код: javadoc (html-документация), 37.199.948 bytes
lzma:16mb:max 2.247 kb 116 secs 1.36 secs dict+lzma 1.977 kb 35 secs 1.59 secs
ppmd:o16:192mb 1.956 kb 22 secs 25 secs dict+lzp+ppmd 1.716 kb 24 secs 16 secs
ppmonstr:o16:160m 1.746 kb 145 secs dict+lzp+ppmonstr 1.570 kb 62 secs
для сравнения: xml+lzma 1.947 kb 38 secs 6.5 secs ppmvc 1.786 kb 29 secs *failed* xml+ppmvc 1.788 kb 34 secs 26 secs lzp+ppmd 1.747 kb 19 secs 20 secs uharc -mx -md32m 1.711 kb 54 secs xml+paq 1.646 kb 365 secs
(имейте в виду, что результаты XML-WRT немного занижены из-за использования им словарей меньшего размера). Все тесты были проведены на процессоре с частотой 1 ГГц
Существуют две широко известные программы словарного препроцессинга.
Во-первых, LIPT, которая состоит из двух частей - первая набирает статистику на большом кол-ве текстов и в конце концов составляет список слов, отсортированный в порядке убывания их употребляемости. Вторая часть кодирует файлы, используя этот словарь, заменяя слова их 1-3 байтовыми кодами. Поскольку коды назначаются словам в порядке убывания частоты, то часто встречающиеся слова получают более короткие коды. Кроме того, первый байт в 2-3 байтовом коде отражает частоту слова, что также увеличивает степень сжатия. К сожалению, эта схема требует таскать с собой достаточно большой словарь, и эффективна только для слов, которые в этот словарь догадались включить
Вторая схема реализована в xml-wrt, который помимо xml-специфичных трюков, способен несколько улучшить сжатие и обычных текстовых файлов. В этой схеме словарь собирается динамически, а точнее - используется двухпроходный алгоритм. На первом этапе создаётся список слов, встречащихся как минимум N раз (N=6..60), на втором этапе этот список слов выводится в выходной поток, и вслед за ним - файл, где эти слова заменены на их коды, создаваемые, как я понял, по тому же принципу, что и в LIPT
Моя программа реализует третью схему, которая показала большую эффективность, чем первые две. Что особенно интересно - хронологически именно моя схема была первой (97-й год), и только закрытость программы привела к тому, что её потенциал оказался неиспользуемым
Основана эта схема на идеях из другого моего упаковщика, CM - единственной в мире программы статического контекстного моделирования. Т.е. она сначала собирает статистику по всему файлу (блоку), выводит её в выходной поток, и затем кодирует блок в соответствии с известным распределением вероятности символов в различных контекстах. Опубликованная реализация CM имела очень серьёзный недостаток - она пыталась создать полное дерево контекстов заранее заданной глубины, и это дерево содержало массу избыточной информации о контекстах, встречающихся всего 1-2 раза, но в то же время не включало информацию о частых контекстах большей длины. Очевидным решением этой проблемы было создавать контексты динамически, при достижении родительским контекстом некоторого кол-ва посещений. Хотя эта идея так и не была реализована в CM, я воспользовался ею в своём словарном алгоритме
В lipt/xml-wrt словом считается последовательность латинских букв, и это слово продолжается до тех пор, пока не встретится символ другого типа. Это упрощает их алгоритм, но уменьшает степень сжатия. В отличие от этого, в моей программе при разборе текста находится самая длинная последовательность _любых_ символов, уже занесённая в словарь. Если эта последовательность уже встречалась 10 или более раз, в словарь заносится "слово" на один байт длиннее. Рассмотрим, например, как этот алгоритм будет обрабатывать бесконечную последовательность звёздочек. Сначала в словарь будет занесено слово "*", после десяти его повторений, т.е. на 11-м байте - слово "*", после десяти его повторений, т.е. уже на 31-м байте - слово "***" и т.д.
Как видите, схема очень напоминает lzw, однако с куда более жёсткими правилами добавления в словарь новых слов. Хотя я и сказал выше, что допускается последовательность любых символов, но в действительности есть очень важная эвристика - все символы делятся на два класса - от 0 до 32, и от 33 до 255, и слово может включать символы только из одного класса. Таким образом, всё "форматирование" текста в виде последовательностей пробелов, табуляций и новых строк, оказывается сосредоточенно в одних "словах", а реальное содержимое - в других, а схема динамического роста слов позволяет держать в словаре слова не слишком короткие (имеющие очень много появлений), но и не слишком длинные и редкие слова - всё регулируется автоматически
Впрочем, из-за того, что символы разбиты на два класса, всё же некоторые слова встречаются очень часто. К примеру, в отформатированном по первому столбцу текстовом файле часто будет встречаться слово CR+LF, поскольку после него уже идут символы другого класса и это слово не может быть расширено несмотря на свой очень большой счётчик повторений
Для представления словаря используется классическая PATRICIA с инкрементальным хешированием. Т.е. все слова отображаются в огромную хеш-таблицу, и хеш-код слова "abcd" вычисляется по хеш-коду слова "abc" и символу 'd'. Поскольку мы можем себе позволить некоторую небрежность на этом этапе, каждый элемент хеш-таблицы хранит всего лишь двухбайтный ключ для обнаружения [большинства] коллизий, и двухбайтный счётчик слова. В список же слов, который будет необходим на втором этапе, мы только заносим новые слова, но никак его не используем
После того, как мы таким образом создали на первом проходе динамический словарь, происходит его чистка. Несмотря на строгость критериев занесения слов, их кол-во всё же оказывается очень велико (порядка 200-500 тысяч на 30-мегабайтном файле), и опыт показывает, что выводить все эти слова в выходной файл - занятие невыгодное (хотя я не пробовал строить словарь динамически в распаковщике - может, это будет выгодно?)
Поэтому из всех этих слов остаются только имеющие больше 50 повторов. Это порядка 10 тысяч слов, которые кодируются всего 50 килобайтами в выходном потоке. Декодер, таким образом, получает готовый список слов, и поэтому имеет очень высокую скорость работы, близкую к скорости вычисления CRC
Во втором проходе тоже есть свои тонкости. Во-первых, по условиям построения дерева слов, в нём трудно найти слова, имеющие частоту больше 10  Поэтому важным моментом является то, что при поиске "хороших" слов дерево обходится снизу вверх, и частоты слов, которые удаляются из словаря, отдаются их "родителям". Таким образом, если к пример слово "birth" втречается в тексте 200 раз, то при построении словаря в нём окажутся его всевозможные "сыновья", включая "birth,", "birthday" и т.д., а частота самого слова "birth" так и останется на отметке 10. Однако если эти производные слова имеют слишком малую встречаемость, то в процессе усечения дерева их частоты отойдут к "birth" и оно всё же будет включено в словарь
Вторая идея заключается в том, что если в тексте часто встречается скажем слово "http://www.sun.com/download/j2ee.jar", то его частота окажется размазана между его частичными префиксами в силу алгоритма построения словаря. И таким образом, вышеописанный алгоритм может счесть достаточно хорошим, скажем, только слово "http://www.su", что не очень-то здорово. Для исключения этой ситуации частоты слов, имеющих только одного ребёнка (ака детерминированных контекстов), отдаются этому единственному ребёнку. Небольшая спекуляция, но на практике это работает
В третьих, в отличие от других словарных алгоритмов, знающих априори, какие символы можно задействовать для декодирования слов, а какие - нет, и потому имеющих большие проблемы например при кодировании русских текстов, моя программа анализирует частоты отдельных символов, и использует для представления слов те символы, которые в исходном тексте встречались досаточно редко. Кол-во символов, которые стоит использовать для кодирования слов, тоже определить достаточно просто, сравнив счётчики повторений символа и слова, конкурирующих за один и тот же код. Те же слова, которым не досталось однобайтовых кодов, спокойно кодируются двумя байтами
Четвёртая, и весьма очевидная идея, заключается в сортировке словаря в лексикографическом порядке и использовании известного алгоритма дифференциального кодирования упорядоченного словаря для уменьшения его размера. Именно это и позволяет упихнуть десяток тысяч немаленьких слов всего в 50 кб
При создании алгоритма большое внимание было уделено оптимизации по скорости и памяти, поэтому его выгодно применять даже с быстрыми методами сжатия (скажем, rar -m2 или 7zip -mx3), где достигается увеличение сжатия на 10-30%. Но главным, конечно, являются результаты в режимах максимального сжатия lzma, ppmd, ppmonstr, где препроцессор увеличивает сжатие на 2-10%, а для lzma и ppmonstr также ускоряет его в 2-4 раза. Фактически, применение этого препроцессора позволяет вывести любой архиватор на принципиально новый уровень. Результаты, показываемые им, значительно лучше, чем у LIPT и XML-WRT, за исключением XML файлов, где XML-WRT использует множество специфичных для этого формата приёмов и обходит DICT
Интересным моментом является сравнение DICT+PPMD с PPMVC. Фактически, оба алгоритма схожм в том, что они позволяют решить проблему неэффективности PPMD на высокоизбыточных файлах вследствие фиксированной длины используемого контекста. PPMVC улучшает сжатие высокоизбыточных файлов, но работает медленней и ухудшает сжатие на обычных текстах. В то же время последовательность dict+lzp+ppmd на всех моих тестах показывала стабильно высокий результат. Похоже, что эти препроцессоры ухитряются "съесть" всю избыточность, и приводить разнородные файлы к довольно близкому уровню энтропии, что решает одну из известных проблем PPMD - зависимость оптимального порядка модели от уровня энтропии конкретных входных данных! Как результат, даже на высокоизбыточных входных файлах, эта "тройка" сжимает быстрее и лучше чистого PPMVC, и уступает всего 0.1% от размера сжатого файла сочетанию dict+lzp+ppmvc
Алгоритм распространяется на условиях GPL лицензии, и я буду рад продать разработчикам коммерческих архиваторов лицензию на использование препроцессора в их программах. В настоящее время я работаю над включением его в свой собственный архиватор, что позволит ему не просто стать номером 1 в мире, но ещё и значительно оторваться от конкурентов
ps: хотя я приаттачил к статье исходники и исполняемый файл препроцессора, наверно немного найдётся людей, желающих его испытывать в таком виде. Простые смертные могут использовать для этого мой архиватор. Командная строка:
arc create a srcfile -t -m5
Также можете попробовать -m5x и -m5p, хотя для последнего метода сжатия потребуется ppmonstr.exe в PATH. Желающие насладиться более изощрёнными техниками камасутры могут почитать описание опций display, logfile, print-config и попробовать, скажем, вот такую команду:
arc a a srcfile -m0=dict:p+lzp:64mb:32:h22+pmm:16:400mb
Сcылки для загрузки:
http://www.haskell.org/bz/dict.zip
http://www.haskell.org/bz/FreeArc-win32.zip
_________________ bulat_z##mail.ru
|
|
| Вернуться к началу |
|
 |
|
ICESCREAM
|
Заголовок сообщения: Добавлено: Вт дек 05, 2006 21:28 |
|
 |
| Завсегдатай |
 |
Зарегистрирован: Чт июл 06, 2006 00:38 Сообщения: 225
|
Ошибка : Архиватор вернул код завершения -1073741819
Упаковка из-под FAR. Вываливается при всех -mX, где m>3. Данные - Fate 2005 (файлы выдернуты из инсталлера). Памяти (судя по вашим данным) - выше крыши.
Какие будут мысли?
|
|
| Вернуться к началу |
|
 |
|
kvark
|
Заголовок сообщения: Добавлено: Вт дек 05, 2006 22:42 |
|
 |
| Завсегдатай |
Зарегистрирован: Вс окт 10, 2004 16:36 Сообщения: 115 Откуда: Минск
|
Вот так всю малину и портят
Мне, на самом деле, хотелось бы ещё для BWT результаты увидеть
|
|
| Вернуться к началу |
|
 |
|
Булат
|
Заголовок сообщения: Добавлено: Вт дек 05, 2006 23:11 |
|
 |
| Завсегдатай |
Зарегистрирован: Пн янв 17, 2005 16:05 Сообщения: 419
|
|
>Мне, на самом деле, хотелось бы ещё для BWT результаты увидеть
попробуй сам. у меня результаты получились неуйстойчивые - где-то выигрыш, где-то проигрыш (использовался grzip). в приницпе, opendak я загрузмл, но в моих тестах grzip идёт как быстрый упаковщиек, который грех портить такими сравнительно меджддленными препроцессорами. если dak может конкурировать по сжатию с ppmd на 64-128 метрах памяти - будет другое дело
>Ошибка : Архиватор вернул код завершения -1073741819
даже не знаю. у меня никогда сбоев не было. попробуй отдельные алгоритмы сжатия (-m4bx/-m4tx/-m4b/-m4t/-mlzma/-mppmd/-mgrzip/-mdict/-mlzp) и скажи на чём сбоит на чём нет. если есть не очень большие файлы на которых проявляется ошибка - присылай их мне. в пределах нескольких мб
_________________ bulat_z##mail.ru
|
|
| Вернуться к началу |
|
 |
|
Булат
|
Заголовок сообщения: Добавлено: Ср дек 06, 2006 02:21 |
|
 |
| Завсегдатай |
Зарегистрирован: Пн янв 17, 2005 16:05 Сообщения: 419
|
ICESCREAM писал(а): Ошибка : Архиватор вернул код завершения -1073741819Упаковка из-под FAR. Вываливается при всех -mX, где m>3. Данные - Fate 2005 (файлы выдернуты из инсталлера). Памяти (судя по вашим данным) - выше крыши.  Какие будут мысли?
исправил ошибку, обновил FreeArc. но предупреждаю - чудес не бывает, и lzma не способен сжать лучше, чем сжимает lzma
что касается OpenDark - то он с препроцессором работает в разы быстрее. но до grzip -l всё равно не дотягивает ни по скорости, ни по сжатию
_________________ bulat_z##mail.ru
Последний раз редактировалось Булат Ср дек 06, 2006 12:32, всего редактировалось 1 раз.
|
|
| Вернуться к началу |
|
 |
|
Булат
|
Заголовок сообщения: Добавлено: Ср дек 06, 2006 12:13 |
|
 |
| Завсегдатай |
Зарегистрирован: Пн янв 17, 2005 16:05 Сообщения: 419
|
>Похоже, что эти препроцессоры ухитряются "съесть" всю избыточность, и приводить разнородные файлы к довольно близкому уровню энтропии
собственно говоря, ничто не мешает прверить это предположение:
Код: Оригинал Энтропия dict+lzp Энтропия Сжатый RusSF 30.730 kb 2,07 bpc 22.004 kb 2,89 bpc 7.942 kb GhcSrc 28.183 kb 1,08 bpc 12.888 kb 2,37 bpc 3.812 kb JavaDoc 37.199 kb 0,37 bpc 6.353 kb 2,16 bpc 1.716 kb Bcc55h 38.953 kb 0,57 bpc 13.165 kb 1,69 bpc 2.784 kb Perl 21.259 kb 1,15 bpc 9.698 kb 2,52 bpc 3.054 kb
как видите, если в первоначальных файлах разброс энтропии был 6 раз, то после препроцессинга он уменьшился до 2-х раз
>Данные - Fate 2005 (файлы выдернуты из инсталлера
поясню своё предыдущее замечание. dict не способен улучшить сжатие нетекстовых файлов, и поэтому он на них даже не применяется. остаётся чистый lzma - точно такой же, как и в 7-zip
_________________ bulat_z##mail.ru
|
|
| Вернуться к началу |
|
 |
|
ICESCREAM
|
Заголовок сообщения: Добавлено: Ср дек 06, 2006 21:58 |
|
 |
| Завсегдатай |
 |
Зарегистрирован: Чт июл 06, 2006 00:38 Сообщения: 225
|
Цитата: поясню своё предыдущее замечание. dict не способен улучшить сжатие нетекстовых файлов, и поэтому он на них даже не применяется. остаётся чистый lzma - точно такой же, как и в 7-zip Гхм! Разница в 10-60 кб на 10мб - несущественна, при условии 7-кратной скорости, которая наблюдается при сравнениее 7-Zip.Ultra и ARC -m6. p.S. После 7-Zip-а на средней системк - невозможно работать. В случаи с вашим архиватором - этих проблем нет. Цитата: исправил ошибку, обновил FreeArc. но предупреждаю - чудес не бывает, и lzma не способен сжать лучше, чем сжимает lzma
А где обновление? Тотже файл вроде... 
Последний раз редактировалось ICESCREAM Ср дек 06, 2006 22:19, всего редактировалось 1 раз.
|
|
| Вернуться к началу |
|
 |
|
ICESCREAM
|
Заголовок сообщения: Добавлено: Ср дек 06, 2006 22:12 |
|
 |
| Завсегдатай |
 |
Зарегистрирован: Чт июл 06, 2006 00:38 Сообщения: 225
|
Словарь русских слов
Источник - http://www.mibeditor.wand.ru/russian.zip
Цитата: Исходный размер : 34,080,768 байт  Инфа от архиватора : Compressing 1 file, 34.080.768 bytes. -m3 - 3,445,789 -m4 - 3,166,968 -m4x - 3,166,937 -m4b - 1,996,845 -m4bx - 1,996,539 -m4t - 3,187,468 -m4tx - 1,998,374 -m5 - 2,685,802 -m5x - 2,685,772 -m5b - 1,189,269 -m5bx - 1,175,374 -m5t - 3,250,368 -m5tx - 1,180,457 -m6 - 2,685,804 -m6x - 2,685,772 -m6b - 1,189,271 -m6bx - 1,175,374 -m6t - 3,250,368 -m6tx - 1,180,457 -mlzma - 1,997,542 -mppmd - 2,106,794 -mgrzip - 2,970,455 -mdict - 29,245,299 -mlzp - 34,081,032 7-Zip.Ultra - 1,168,756 Rar.m5 - 2,974,953 Словарь английских словИсточник - http://www.mibprogs.nm.ru/mibeditor/engdic.zipЦитата: Исходный размер : 1,765,170 байт  Инфа от архиватора : Compressing 1 file, 1.765.170 bytes. -m3 - 471,843 -m4 - 407,434 -m4x - 409,192 -m4b - 407,430 -m4bx - 409,188 -m4t - 538,216 -m4tx - 395,970 -m5 - 407,981 -m5x - 407,582 -m5b - 407,977 -m5bx - 407,578 -m5t - 538,446 -m5tx - 396,231 -m6 - 407,980 -m6x - 407,582 -m6b - 407,978 -m6bx - 407,578 -m6t - 538,446 -m6tx - 396.231 -mlzma - 407,470 -mppmd - 538,548 -mgrzip - 559,391 -mdict - 1,192,507 -mlzp - 1,765,415 7-Zip.Ultra.lzma - 407,305 Rar.m5 - 546,990
|
|
| Вернуться к началу |
|
 |
|
Булат
|
Заголовок сообщения: Добавлено: Ср дек 06, 2006 22:22 |
|
 |
| Завсегдатай |
Зарегистрирован: Пн янв 17, 2005 16:05 Сообщения: 419
|
|
может лучше на "ты"?
текстовые файлы прграмма ест-но жмёт лучше и быстрее. моё замечание относилось именно к ресурсам игрушек
и кроме того, быстрая упаковка может иметь в качестве обратной стороны медленную распаковку, требующую к тому же много памяти. вы про это не забываете?
_________________ bulat_z##mail.ru
|
|
| Вернуться к началу |
|
 |
|
Булат
|
Заголовок сообщения: Добавлено: Ср дек 06, 2006 22:28 |
|
 |
| Завсегдатай |
Зарегистрирован: Пн янв 17, 2005 16:05 Сообщения: 419
|
>А где обновление? Тотже файл вроде...
архив за 5-е число. размер exe остался тот же, ну так такм и изменений на 2 копейки
_________________ bulat_z##mail.ru
|
|
| Вернуться к началу |
|
 |
|
ICESCREAM
|
Заголовок сообщения: Добавлено: Ср дек 06, 2006 22:44 |
|
 |
| Завсегдатай |
 |
Зарегистрирован: Чт июл 06, 2006 00:38 Сообщения: 225
|
А я игрушки и имел в виду, когда говорил о 60кб на 10мб  b 7-микратной скорости.
Тем более куда меньшее ресурсопотребление (на глаз). Учитывая, что пираты и причисленные к ним игроделы маниакально пересели на 7-zip. Народ просто вынужден иметь для установки игры более мощную систему, чем требуется для самой игры.
|
|
| Вернуться к началу |
|
 |
|
Булат
|
Заголовок сообщения: Добавлено: Чт дек 07, 2006 00:18 |
|
 |
| Завсегдатай |
Зарегистрирован: Пн янв 17, 2005 16:05 Сообщения: 419
|
|
у меня такое подозрение, что ты сравниваешь программу на текстовых файлах, и потом делаешь вывод, что и на ресурсах к игрушке она будет в 7 раз быстрее?
_________________ bulat_z##mail.ru
|
|
| Вернуться к началу |
|
 |
|
ICESCREAM
|
Заголовок сообщения: Добавлено: Чт дек 07, 2006 00:38 |
|
 |
| Завсегдатай |
 |
Зарегистрирован: Чт июл 06, 2006 00:38 Сообщения: 225
|
Выложить результаты сравнения на GEX/Fate 2005?
На Gex (что-то около 70 мегабайт) - 7-Zip меньше на 68kb, вот только потратил почти 20 минут против 3 с мелочью, да и работать на компе после него было уже нельзя 
|
|
| Вернуться к началу |
|
 |
|
Булат
|
Заголовок сообщения: Добавлено: Чт дек 07, 2006 11:15 |
|
 |
| Завсегдатай |
Зарегистрирован: Пн янв 17, 2005 16:05 Сообщения: 419
|
выложи. и перепроверь их сначала. не должно такого быть. 7zip 4.43, надеюсь?
хотя есть пара подозрений - lzp препроцессор, и exe препроцессор, используемый на всех файлах, в отличие от 7z. первое в принципе, могло дать такой результат
попробуй с опцией -mlzma:32mb:max:bt4:128/6t - это то же, что и -m6, но с отключением lzp-препроцессора для бинарных файлов. если результаты получатся как у 7-zip, я по крайней мере пойму в чём дело
>да и работать на компе после него было уже нельзя
это из-за того, что в ultra используется примерно 800 мб памяти. попробуй 7z -mx9 -md=32m
ну теперь до меня дошло - 7zip у тебя тормозил из-за своппинга. уменьшишь словарь - и всё будет ок
kvark, я разобрался почему результаты столь слабые с bwt. это из-за того, что у меня используются 1- и 2-байтовые коды для слов, и 2-байтовые могут заканчиваться _любым_ символом. ес-но, это разбавляет контексты всякой ерундой, и страдает от этого в первую очередь BWT (во вторую наверное PPM). без 2-байтовых кодов (опция -1 у dict) проигрыша никогда не бывает, но и выигрыш очень слабый, где-то 1-2%. возможно, я над этим поработаю. в идеале конечно, кодер должен работать с 2-байтовыми элементами 
_________________ bulat_z##mail.ru
|
|
| Вернуться к началу |
|
 |
|
kvark
|
Заголовок сообщения: Добавлено: Чт дек 07, 2006 15:00 |
|
 |
| Завсегдатай |
Зарегистрирован: Вс окт 10, 2004 16:36 Сообщения: 115 Откуда: Минск
|
жаль, что так...
будем ждать апдейтов 
|
|
| Вернуться к началу |
|
 |
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
Сайт о сжатии >>
Новинки |
О сервере |
Статистика
Книга "Методы сжатия данных" >>
Универсальные |
Изображений |
Видео
Разделы >>
Download (статьи+исходники) |
Ссылки |
Ru.compress |
Arctest |
Видео |
Форум |
Старый Форум
Проекты >>
А.Ратушняка |
М.Смирнова |
В.Юкина |
Е.Шелвина |
А.Филинского |
Д.Шкарина |
С.Оснача |
Д.Ватолина
|