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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Архивация с небольшим словарем из больших слов 
:(
    Опции темы
semibug
Дата 27.9.2010, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



На входе имеем множество файлов, содержащих большие непрерывные блоки из ограниченного множества (для примера - имеем 100 образов ISO, на которых записаны треки,  вариантов которых всего 20) .
Требуется сжать эти файлы. Обычные архиваторы не могут эффективно их обработать, т.к. длина идентичных участков слишком большая для словаря.
Основная проблема в написании кода - быстрый алгоритм, выявляющий одинаковые области в разных файлах.
Простой перебор загрузит мой процессор на ближайший триллион лет. В рамки задачи это вписывается с трудом.
Интуитивно тянет в сторону буста, с какой стороны подойти не знаю.


PM   Вверх
xvr
Дата 27.9.2010, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Области в файлах выровнены? Если да, то можно вычислять свертки (например CRC32 или MD5) от блоков (в единицах выравнивания), и сравнивать их значения (обычными алгоритмами архивирования).

Если области не выровненные, то вычислять придется скользящие свертки, не уверен, что их не получится столько же, сколько было исходных данных  smile 

PM MAIL   Вверх
baldina
Дата 27.9.2010, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

Обычные архиваторы не могут эффективно их обработать, т.к. длина идентичных участков слишком большая для словаря.

модифицируй код архиватора, увеличив размер словаря
PM MAIL   Вверх
semibug
Дата 27.9.2010, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



baldina, вряд ли код какого либо архиватора будет эффективно работать со словами в несколько десятков мегабайт.

xvr, области произвольные. Т.е. разные куски длиной от 30 до 100 мб из первичного набора. могут быть склеены в произвольном порядке (в произвольном количестве).
Вот, кстати, идея на счет выделения сверток. Но т.к. границы кусков изначально не известны, то кажется, возвращаемся к началу.

Может быть ответ лежит где-то в области распознавания картинок.
Например для того, чтобы найти одинаковые области в двух массивах делаем какой-то "температурный" снимок, который передает что-то вроде не точного отпечатка для разных областей. Затем сравниваем такие отпечатки и находим наиболее близкие. После можно сравнивать уже побайтно и расползаться в обе стороны, пока не будет найдено различие.
Проходим таким образом несколько раз по обоим массивам, и отсеиваем уже найденные соответствия.
В общем пока туманно.



Это сообщение отредактировал(а) semibug - 27.9.2010, 15:48
PM   Вверх
baldina
Дата 27.9.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

 вряд ли код какого либо архиватора будет эффективно работать со словами в несколько десятков мегабайт

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

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


Опытный
**


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

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



Цитата(baldina @  27.9.2010,  16:00 Найти цитируемый пост)
чем это хуже, чем поиск подстрок в несколько десятков мегабайт?

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

Пытаюсь нагуглить по сабжу, вероятно задач достаточно рутинная и должна быть решена ранее.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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