2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Изменение сжатых данных без разархивирования.
Сообщение15.05.2013, 11:38 
Здравствуйте! Мне нужно сжать данные и впоследствии иметь доступ(считывание/запись) к определенным данным в получившимся архиве без распаковки всего архива. Структура данных такова, что там много повторяющихся последовательностей. Последнее, что сам придумал это в начале применять RLE кодирование. Например AAAAABCDEEE -> 5A -3BCD 3E; минус перед числом означает что последовательность символов идет как есть. И если мне нужно получить доступ к какому-то байту, я простываю от начала до конца все биты и нахожу нужный. Мне этот способ кодирования и доступа к данным не нравится и кажется далеко не оптимальным. Есть ли уже какие-то готовые наработки по этой теме которые можно почитать? Или поделитесь своими соображениями. Заранее спасибо.

 
 
 
 Re: Изменение сжатых данных без разархивирования.
Сообщение15.05.2013, 12:50 
Можно поподробнее, какая у "данных" структура и какой именно доступ вам нужен.

 
 
 
 Re: Изменение сжатых данных без разархивирования.
Сообщение15.05.2013, 15:50 
Joker_vD в сообщении #724148 писал(а):
Можно поподробнее, какая у "данных" структура и какой именно доступ вам нужен.

Допустим обычный файл состоит из латинских букв. На подобии AAAAABBBBBBBCCCCCCCCCCCAAAAAAAAAAAAADDDDDKOEDAACEKBBDOOO; Мне нужно упаковать это чтобы занимало меньше места. И мочь обращаться как к обычному массиву в языке C по индексу то есть чтобы возможны были операции: char a = file[20]; file[15] = 'L';

 
 
 
 Re: Изменение сжатых данных без разархивирования.
Сообщение15.05.2013, 16:33 
Аватара пользователя
Внутренний формат должен быть удобным для работы.
Не сжимай.

 
 
 
 Re: Изменение сжатых данных без разархивирования.
Сообщение15.05.2013, 16:51 
oTkPoBeHuE в сообщении #724232 писал(а):
file[15] = 'L';
И тут вам придётся двигать неизвестной длины кусок файла куда-то вправо.

А что, подробнее структуру не опишете?

 
 
 
 Re: Изменение сжатых данных без разархивирования.
Сообщение15.05.2013, 17:18 
Аватара пользователя
oTkPoBeHuE в сообщении #724232 писал(а):
Допустим обычный файл состоит из латинских букв. На подобии AAAAABBBBBBBCCCCCCCCCCCAAAAAAAAAAAAADDDDDKOEDAACEKBBDOOO; Мне нужно упаковать это чтобы занимало меньше места. И мочь обращаться как к обычному массиву в языке C по индексу то есть чтобы возможны были операции: char a = file[20]; file[15] = 'L';

Удобно сжимать кусками с известными диапазонами. Чтобы не дешифровать каждый раз при повторных обращениях, выделить буфер. Это не работает при случайных обращениях.
Вариант - куски по возможности сжимаются в коды фиксированной длины, если её не хватает, то вписывается ссылка, где искать остаток кода.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group