Задача следующая: находить произвольную последовательность байт в файле большого объема. Решение придумал , но видимо настолько примитивное, что и результат не устраивает , а именно работает все так медленно , что проще ничего не искать :)
Вот функция, реализующая поиск:
int FindPattern(FILE *dat,unsigned char *p,unsigned long int idx)
{
long int i,j;
unsigned char buf; // для хранения одного байта
// в idx кол-во эл-ов в p[]
i=idx;j=0;
while(!feof(dat) && i!=0) {
fread(&buf,1,1,dat);
if(buf==p[j]) //в p[] нужная хранится последовательность
{
i--;
j++;
}
else {
j=0;
if(i!=idx) fseek(dat,i-idx,SEEK_CUR);
i=idx;
}
}
if(i==0) return 1;
else return 0;
}
Может и коряво написано, но ускорить такой алгоритм уже имхо нельзя. Поэтому помогите плиз, есть где про такого рода задачи почитать или может есть готовые решения в какой-нибудь либе?
Спасибо.