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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сжатие больших, повторяющихся последовательностей 
:(
    Опции темы
semibug
Дата 7.7.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Имеется набор файлов, размером около 100 мегабайт, требуется сжать их как можно лучше, учитывая особенности их содержимого. А именно, все эти файлы склеены в разном порядке из одних и тех же файлов, размером около 20 мегабайт.
Представляется возможным сжать файлы в архив, до размера, немного превышающего сумму исходных файлов, из которых были склеены большие файлы.
Архиватор WinRar не дал такого сжатия.
Есть ли готовые решения для компрессии данных подобного рода.
PM   Вверх
Sartorius
Дата 7.7.2009, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



ИМХО готового не будет - слишком вилика повторяющаяся подпоследовательность. 
PM MAIL ICQ   Вверх
andrew_121
Дата 7.7.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(semibug @  7.7.2009,  17:25 Найти цитируемый пост)
Есть ли готовые решения для компрессии данных подобного рода. 

Да.
http://ru.wikipedia.org/wiki/PAQ

Lzma SDK.
http://www.7-zip.org/sdk.html


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
GoldFinch
Дата 7.7.2009, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



semibug, 
тут программистский форум вроде, а ты про готовое %)
напиши код который будет искать эти самые исходные файлы, и сжимать это все
результат запакуй rar-ом

Это сообщение отредактировал(а) GoldFinch - 7.7.2009, 18:09
PM MAIL ICQ   Вверх
semibug
Дата 7.7.2009, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



andrew_121, протестировал в разных форматах - результат не удовлетворительный.

GoldFinch, а как же повторное использование кода? ))
На край действительно придется писать, а пока есть надежда одной командной строкой задачу решить.
PM   Вверх
andrew_121
Дата 7.7.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(semibug @  7.7.2009,  18:16 Найти цитируемый пост)
протестировал в разных форматах - результат не удовлетворительный.

Что тестил? Как тестил? Сообщи условия/результаты.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
semibug
Дата 7.7.2009, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



andrew_121, севен зипом,  и вариациями формата PAQ.
Общий итого таков, что они "не видят" что файлы состоят из одинаковых кусков, видимо по тому, что как написал Sartorius, куски слишком большие.
Это видно по сравнению размеров архивов - в один упаковывается один исходный файл, в другой два исходных файла. Во втором случае размер примерно в два раза больше. Не смотря что оба файла состоят из одинаковых, но склеенных по разному кусков.

Попробую детектить повторяющиеся блоки программно. Хороших идей пока нет, поиск "в лоб" ( простой перебор ) очень медленный.
PM   Вверх
korbian
Дата 8.7.2009, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 2
Всего: 14



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

Добавлено через 4 минуты и 56 секунд
хотя, и без упаковки должен получиться меньший размер


--------------------
korbian ©
PM   Вверх
semibug
Дата 8.7.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



korbian, вся проблема в том, что заранее неизвестно из каких кусков состоят файлы, поэтому основное проблемное место алгоритма - выделение повторяющихся фрагментов. Попытки простого перебора дают плачевный результат - для файлов в 100 мегабайт он никогда не закончится.
PM   Вверх
zim22
Дата 8.7.2009, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(semibug @  7.7.2009,  17:25 Найти цитируемый пост)
А именно, все эти файлы склеены в разном порядке

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

Это сообщение отредактировал(а) zim22 - 8.7.2009, 21:44


--------------------
PM MAIL   Вверх
semibug
Дата 8.7.2009, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Было бы слишком просто)) Файлы я не контролирую (это коллекция образов для прошивки специфического оборудования).
Т.е. работать приходиться с уже склеенными файлами. 
PM   Вверх
mes
Дата 9.7.2009, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(semibug @  8.7.2009,  21:51 Найти цитируемый пост)
Файлы я не контролирую... работать приходиться с уже склеенными файлами.  

хочу заметить, что с этого надо было начинать.
smile

Добавлено через 3 минуты и 23 секунды
Цитата(semibug @  8.7.2009,  19:56 Найти цитируемый пост)
поэтому основное проблемное место алгоритма - выделение повторяющихся фрагментов. 

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

Это сообщение отредактировал(а) mes - 9.7.2009, 00:32


--------------------
PM MAIL WWW   Вверх
semibug
Дата 9.7.2009, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



mes, Некоторая исходная информация имеется, и в конкретно моем случае можно построить адаптированные под известные размеры и разделители внутри файла алгоритмы. Но все таки хочется иметь "общий" алгоритм, на входе у которого только набор файлов и ничего больше.
Роюсь на эту тему в инете, пока хорошего мало. Линейный перебор с построением словаря, способного вмещать фрагменты до нескольких мегабайт, слишком медленный. 
Смотрю в сторону параллельных вычислений с использованием графических процессоров или FPGA.
Обобщенно представляю так - устройство (возьмем к примеру FPGA) получает образец размером в 1 мегабайт, и размещает их в регистрах. Далее отправляем потоком другую последовательность, например поток в 100 мегабайт. Он поступает на сдвиговые регистры, кол-во которых соответствует кол-ву регистров образца. Теперь отдельная схема сравнивает содержимое всех регистров начиная с первого (все сравнения происходят одновременно). Отдельная схема выдает результат сравнения (кол-во совпавших бит от начала последовательности). Таким образом пропускаем всю последовательность и за один такт сразу сравниваем часть потока с образцом большого размера.
Оставшаяся работа выполняется уже на стороне PC.
PM   Вверх
DrHex
Дата 9.7.2009, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



semibug как это относится к С++????
--------------------
google.com и это все.
PM MAIL   Вверх
mes
Дата 9.7.2009, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(semibug @  9.7.2009,  00:32 Найти цитируемый пост)
. Но все таки хочется иметь "общий" алгоритм, на входе у которого только набор файлов и ничего больше.

т.е к примеру  мы имеем 1000 файлов кусков по 20 мегабайт и один архив, состоящий из 5 -10 кусков в произвольном порядке и ничего лишнего в своем теле не имеет.
задача определить из каких кусков состоит архив. так ?

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



Это сообщение отредактировал(а) mes - 9.7.2009, 02:58


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3301 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.