Задача следующая: находить произвольную последовательность байт в файле большого объема. Решение придумал , но видимо настолько примитивное, что и результат не устраивает , а именно работает все так медленно , что проще ничего не искать :)
Вот функция, реализующая поиск:
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;
}
Может и коряво написано, но ускорить такой алгоритм уже имхо нельзя. Поэтому помогите плиз, есть где про такого рода задачи почитать или может есть готовые решения в какой-нибудь либе?
Спасибо.
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от justme
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Интересно! (2004)
- Форум Оптимизация ввода-вывода (2005)
- Форум помогите пожалуста (2004)
- Форум Recv снова в ожидании,в то время как Send уже все передал. (2015)
- Форум g++ expects argument (2013)
- Форум Парсинг 3ds файла -> добраться бы до OBJ_TRIMESH (0x4100) (2013)
- Форум вопрос про запись на диски (2015)
- Форум Вывести содержание бинарного файла (2013)
- Форум Непонятная ошибка распределения памяти (2016)
- Форум Что-то конкурсов у нас давно не было... где моя K&R ! (2016)