|
Упаковка данных (сжатие данных), Упаковка данных (сжатие данных) |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 18)
|
Sep 5 2007, 10:55
|

Местный
  
Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528

|
Цитата(satnettv @ Sep 5 2007, 14:22)  Задача в следующем:
требуется простой пример упаковки (сжатия) данных (например, строку из 80 символов сжимать до 30) на каком-нибудь примере, написанном на Си. Пишу на code vision, с ассемблером не в ладах. 1. Хотьи старо, но рекомендую потратить время и почитать что-нибудь о “сжатии без потерь”, либо погуглить. 2. Алгоритмы сжатия зависят от типа информации. Я так понимаю, что у тебя в качестве данных текстовая информация. Это намного упрощает. Самый простой и тупой способ - замена одинаковых подряд идущих символов на количество повторов. Например, имеется строка 7892222222222368 после сжатия 789[at][10]268 [at] – управляющий символ [10] – число в двоичном виде, количество символов повтора, для данного примера это десять двоек.
--------------------
Для связи email: info собака qbit.su
|
|
|
|
Guest_=AVR=_*
|
Sep 5 2007, 11:33
|
Guests

|
Примитивное сжатие типа посоветованного выше обычно называется RLE - Run-Length Encoding. Алгоритм хорошо ложится на АВР, но результат будет очень сильно зависеть от типа входных данных - иногда экономия может оказаться нулевой
|
|
|
|
|
Sep 5 2007, 11:40
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(satnettv @ Sep 5 2007, 13:22)  требуется простой пример "Простые" не жмут абстрактые текстовые строки почти в три раза. Да и сложные тоже без всяких гарантий. Попробуйите кучку Ваших реальных строк пожать, например, RAR-ом который совсем не прост и даже словарь которого ни в какую AVR не влезет. Где-то шансы есть при явном ограничении набора символов, их перекодировке в соответствии с вероятностью использования с последующим сжатием чем-то простым классическим зипообразным.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 5 2007, 20:56
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(mse @ Sep 5 2007, 14:36)  есть такой алгоритм - RADIX-50, по-мойму. Упаковывает 3 ASCII символа басурманских, в 2. ... Гуголь рулит... Может, я на что сгожусь? (заместо гуглы  ) Он же не "сжимал", а "упаковывал". Три символа из очень ограниченного набора - большие латинские буквы, цифры и ещё несколько знаков (вот тут уже гуглу спрашивайте) - всего вместе 40 символов - упаковывались в 16-битное слово. 40*40*40 = 64000 возможных комбинации, в аккурат в 65536 влазит. p.s. RADIX-50.... 50oct = 40dec, в 16 бит записывалось 3-значное число "по основанию 40"
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Sep 6 2007, 00:12
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(scifi @ Sep 5 2007, 23:11)  Случайная последовательность байтов (независимых и с равномерным распределением) не может быть сжата никаким алгоритмом. Ни на 30%, ни на 1%, нисколько. Должна сжаться примерно в два раза. Это и подтверждается на упаковщиках. Всё сжимается до каких то пределов. Критерии несжимаемости файлов не байтовые, а битовые. Вводится понятие энтропии и т.д. Понятие "равномерное распределение байтов" не совсем корректно, что значит "независимый байт" - убей не знаю. Я думаю на любом двоичном файле вы получите распределение близкое к равномерному. Имеет значение не само распределение, а последовательность следования. Также вы не учитываете "предустановленный словарь". Иными словами если словарь будет передаваться в самих данных, то это одно, а если он не будет передаваться, то совсем другое.
|
|
|
|
|
Sep 6 2007, 00:49
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Да??? Сожмите-ка эту случайную последовательность:
512k.txt ( 64 килобайт )
Кол-во скачиваний: 210UPD: Это был ответ на пост выше, но его уже исправили. Мне вот что интересно: кто успел скачать эту бредятину 4 раза за 10 минут?  Цитата(SasaVitebsk @ Sep 6 2007, 04:12)  Я думаю на любом двоичном файле вы получите распределение близкое к равномерному. Отнюдь нет. Большинство современных упаковщиков работают в два этапа: на первом данные упаковываются каким-нибудь LZ-подобным алгоритмом, затем Хаффманом.
|
|
|
|
|
Sep 6 2007, 01:10
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(aaarrr @ Sep 6 2007, 03:49)  Да??? Сожмите-ка эту случайную последовательность:
512k.txt ( 64 килобайт )
Кол-во скачиваний: 210UPD: Это был ответ на пост выше, но его уже исправили. Мне вот что интересно: кто успел скачать эту бредятину 4 раза за 10 минут?  Отнюдь нет. Большинство современных упаковщиков работают в два этапа: на первом данные упаковываются каким-нибудь LZ-подобным алгоритмом, затем Хаффманом. 1. Эту бредятину продолжают качать и качать.  Насколько я понимаю аналогичную легко получить любым упаковщиком.  2. Не буду с вами спорить потому, что нет времени аргументировать. По моему файл заполненный примерно так 0,1,2,3....ff,0,1,2.. и так раз 10 даст равномерное распределение. При этом сожмётся как положено. 3. Ваш файл можно сжать и соответственно разжать без потери информации. Правда, естественно, если вы сгенерируете другой с помощью того же упаковщика возможно он разбухнет. Я просто уточнял, что всё не так просто. И для однозначного ответа не достаточно информации.
|
|
|
|
|
Sep 6 2007, 01:21
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(SasaVitebsk @ Sep 6 2007, 05:10)  1. Эту бредятину продолжают качать и качать.  Насколько я понимаю аналогичную легко получить любым упаковщиком.  Можно упаковщиком. Бредятина создана генератором случайных чисел. Цитата(SasaVitebsk @ Sep 6 2007, 05:10)  2. Не буду с вами спорить потому, что нет времени аргументировать. По моему файл заполненный примерно так 0,1,2,3....ff,0,1,2.. и так раз 10 даст равномерное распределение. При этом сожмётся как положено. Ага, LZ отработает со свистом. Вот только у "любого" файла распределение бывает, как правило, неравномерным. Цитата(SasaVitebsk @ Sep 6 2007, 05:10)  3. Ваш файл можно сжать и соответственно разжать без потери информации. Сжать? У меня вот не получается, не знаю, как у других
|
|
|
|
|
Sep 10 2007, 11:40
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(proba @ Sep 10 2007, 11:14)  использую LZW для передачи текстовои информации с логгера в PC. данные накопляются в датафлеш и передаются одним сеансом связи. сотнощение 3 : 1 . пример, данных 10120 б, в сжатом виде 3231 б. алгоритм несложныи но требуется порядка 32K RAM. при коротком строке вряд ли зaметного сжатия будет. А словарь по ходу формируешь? В смысле каждый сеанс с пустого словаря начинаешь? Или взял предустановленный? И что-то 32к многовато получилось. У меня что-то около 10 выходило. Алгоритм несложный, но самое главное - поиск.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|