Помогите с алгоритмом
От: sinys5 aboutfx.narod.ru
Дата: 16.11.05 16:40
Оценка:
Помогите написать алгоритм, который бы исключал в тексте два одинаковых подряд идуших байта, при этом не увеличивал файл или увеличивал по самому минемуму.
Вот то что мне предложили на компрессион:

out=(symbol+1+old_symbol)%6;
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)%6;
old_symbol=in;


Но этот код при встрече 255 символа повторяет предыдуший, а значит не подходит под условие задачи
Re: Помогите с алгоритмом
От: sinys5 aboutfx.narod.ru
Дата: 16.11.05 16:47
Оценка:
извиняюсь, криво скопировалось, после % не 6, а 256
Может быть можно как-то исправить чтобы не выдовал два подряд идуших символа или свой придумайте, предлогайте
Re: Помогите с алгоритмом
От: Vintik_69 Швейцария  
Дата: 16.11.05 17:02
Оценка:
Здравствуйте, sinys5, Вы писали:

S>Помогите написать алгоритм, который бы исключал в тексте два одинаковых подряд идуших байта, при этом не увеличивал файл или увеличивал по самому минемуму.


Ну очевидно, что такого алгоритма, который не увеличивал бы файл, не существует. Хотя бы потому, что произвольных файлов размера <= N больше, чем файлов размера <= N, в которых нет двух подряд идущих байт.
Re[2]: Помогите с алгоритмом
От: bedward70 Россия http://www.bedward70.narod.ru/
Дата: 18.11.05 05:10
Оценка:
Здравствуйте, Vintik_69, Вы писали:

V_>Здравствуйте, sinys5, Вы писали:


S>>Помогите написать алгоритм, который бы исключал в тексте два одинаковых подряд идуших байта, при этом не увеличивал файл или увеличивал по самому минемуму.


V_>Ну очевидно, что такого алгоритма, который не увеличивал бы файл, не существует. Хотя бы потому, что произвольных файлов размера <= N больше, чем файлов размера <= N, в которых нет двух подряд идущих байт.


Изобретать велосипед не стоит, такой алгоритм используется в графическом формате PCX, очень рекомендую ознакомиться, там все "дешего и сердито" и довольно эфективно для такого простенького алгоритма.

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

Могу предложить гарантированный способ увеличения текста максимум на 1 символ: ставить обин байт признака проводилось сжатие или нет, если алгоритм не смог сжать, то признак без сжатия, если удалось уменьшить размер, то ставим признак.

С уважением, Эдвард
С уважением, Эдвард
Re[3]: Помогите с алгоритмом
От: sinys5 aboutfx.narod.ru
Дата: 19.11.05 15:39
Оценка:
Там кодируются интервалы, которые идут подряд, а у меня не обязательно подряд. Метода чтобы символы не повторялись я так и не нашел.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.