Re[6]: Поиск в двоичном файле
От: rzhitn  
Дата: 21.12.01 16:40
Оценка:
Спасибо за ответ. Очень интересный алгоритм.

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

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


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


TSS>>>Тогда просто ищи оптимальный алгоритм поиска, где-то у меня есть один, чем больше кусок "паттерна", тем быстрее ищет...


R>>Если можно, кинь на e-mail етот алгоритм а то как-то изобретать велосипед не хочется


TSS>Зачем на мыло. Вот он:

TSS>--- cut ---
TSS>
TSS>/////////////////////////////////////////////////////////////////////////////
TSS>// QSearch ()
TSS>// Where = QSearch (pWhere, cbWhere, pWhat, cbWhat)
TSS>//
TSS>LPBYTE QSearch (LPBYTE s, INT n, LPBYTE p, INT m)
TSS>{
TSS>  _ASSERTE (m < 256);

TSS>  if (m > n)
TSS>    return NULL;

TSS>  BYTE d[256]; memset(d, m, 256);
TSS>  for (int j = 0; j < m - 1; j++)
TSS>    d[p[j]] = m - j - 1;

TSS>  for (int i = m; i < n; i += d[s[i-1]])
TSS>  {
TSS>    int j = m, k = i;
TSS>    do
TSS>    {
TSS>      if (--j < 0)
TSS>        return (s + k);
TSS>      --k;
TSS>    }
TSS>    while (p[j] == s[k]);

TSS>    _ASSERTE(j >= 0);
TSS>  }

TSS>  return (NULL);
TSS>  
TSS>} // QSearch
TSS>

TSS>--- cut ---

TSS>Ограничения: Паттерн не более 256 байт. Заголовки фреймов MPEG-2, надеюсь, прикрутишь сам...


TSS>P.S. Кста, в свое время мне этот код подкинул Alex Fedotov...

TSS>P.P.S. 2Alex Fedotov: дело твое живет и процветает ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.