Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Алгоритм исключения попадания одинаковых байт

13K
16 ноября 2005 года
sinys
8 / / 16.11.2005
Помогите написать алгоритм, который бы исключал в тексте два одинаковых подряд идуших байта, при этом не увеличивал файл или увеличивал по самому минемуму.
Вот то что мне предложили на компрессион:

out=(symbol+1+old_symbol)%256;
old_symbol=out;
fwrite(&out,1,1,file);

А при чтении — наоборот:

fread(&in,1,1,file);
if(in==old_symbol)printf("Error in input file");
symbol=(in-1-old_symbol+256)%256;
old_symbol=in;

Но этот код при встрече 255 символа повторяет предыдуший, а значит не подходит под условие задачи
3.6K
17 ноября 2005 года
Denton
41 / / 18.08.2004
Я бы сделал так:

1. Открываем файл
2. Закидываем содержимое в массив
3. По байтам парсируем массив
- Если [original_array!=original_array[i-1]]
То копируем элемент в new_array
4. Записываем в файл
13K
17 ноября 2005 года
sinys
8 / / 16.11.2005
Главная цель не потерять данные, то есть чтобы их можно было востановить
255
17 ноября 2005 года
Dart Bobr
1.4K / / 09.04.2004
Цитата:
Originally posted by sinys
Главная цель не потерять данные, то есть чтобы их можно было востановить


Тогда нужно перейти к 9-битному алфавиту.

13K
17 ноября 2005 года
sinys
8 / / 16.11.2005
Это слишком увеличит файл, читай условие: желательно не увеличивать файл вообще, а в шудшем случае увеличить на 1-2 байта, но стабильно, то есть что для мегабайта данных, также и для 2,3 итд мегобайт
391
17 ноября 2005 года
Archie
562 / / 03.02.2005
Цитата:
Originally posted by sinys
Это слишком увеличит файл, читай условие: желательно не увеличивать файл вообще, а в шудшем случае увеличить на 1-2 байта, но стабильно, то есть что для мегабайта данных, также и для 2,3 итд мегобайт



Eto nevozmojno, t.k. ty pytaeshsya v 1 byte zapihnut' informaciyu o 256-ti simvolah + informaciu o povtoryaemosti otnositel'no predyduschego - vse eto v odin byte ne vlezet.

Mojno poprobovat' 9-ti bitnyj alfavit +statisticheskoe kodirovanie (sjatie), no opyat' je nikakoj garantii, chto vyhodnoj file budet ne tolsche vhodnogo :)

13K
24 ноября 2005 года
sinys
8 / / 16.11.2005
Цитата:
Originally posted by Denton
Я бы сделал так:

1. Открываем файл
2. Закидываем содержимое в массив
3. По байтам парсируем массив
- Если [original_array!=original_array[i-1]]
То копируем элемент в new_array
4. Записываем в файл



И чего? как узнать где был символ? Строка очень длинная, чтобы запоминать позицию уйдет слишком много байт

292
25 ноября 2005 года
Matush
726 / / 14.01.2004
Цитата:
Originally posted by sinys
Главная цель не потерять данные, то есть чтобы их можно было востановить


Сформулируй нормально задачу.

Если можно запаковывать N подряд идущих байт, то это RLE. Как не крути этот алгоритм, файл все равно будет запаковываться по разному. А в общих случаях будет намного больше исходного.

Почему нельзя запаковывать весь файл?

Вобщем сформулируй все что надо.

13K
25 ноября 2005 года
sinys
8 / / 16.11.2005
[QUOTE]Почему нельзя запаковывать весь файл?

Вобщем сформулируй все что надо.[QUOTE]

Можно паковать как хочешь, но есть условие чтобы файл не увеличивался или увеличивался по самому минемуму, файл можно было потом обратно распоковать и без потерь. Ну и конечноже запакованный он должен исключать попадание двух подряд идуших символов
292
25 ноября 2005 года
Matush
726 / / 14.01.2004
Цитата:
Originally posted by sinys
Можно паковать как хочешь, но есть условие чтобы файл не увеличивался или увеличивался по самому минемуму


Едрен батон. Нельзя было сразу написать что нужен алгоритм архивирования файла?
Надо было заморачивать.

Вариантов много. Можно юзать готовые решения.
Можно написать самому. Алгоритмов тоже куча.
На сайте есть исходники. Я один пробывал, тот что LZW. Правда он не рабочий, точнее почти рабочий, он не до конца распаковывает. Если надо могу его подправить.

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

13K
25 ноября 2005 года
sinys
8 / / 16.11.2005
Мне всеравно будет этот алгоритм архивировать или просто убирать подряд идушие байты каким-то методом, главное чтобы он соответсвовал приведенным выше критериям. Это нужно для уже моего алгоритма сжатия.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог