Поиск в обратном направлении с Бойером-Муром-ХорспуломC++

Программы на C++. Форум разработчиков
Anonymous
Поиск в обратном направлении с Бойером-Муром-Хорспулом

Сообщение Anonymous »

Я реализовал алгоритм поиска Бойера-Мура-Хорспула, и он отлично работает, когда я хочу выполнить поиск вперед по тексту. Я пытаюсь адаптировать его для работы в обратном направлении и, похоже, не могу сделать это правильно.

Есть ли пример поиска в обратном направлении с использованием BMH?

В качестве справки, вот мой код:

POSITION_T cDocument::FindNext(std::string needle, POSITION_T start)
{
size_t buffersize = mBuffer.GetByteSize() ;
size_t needlesize = needle.length() ;
vector badchars(256, -1) ;

BadCharHueristic(needle, badchars) ;

size_t s = mBuffer.ConvertPositionToByte(start) ;
while(s = 0 && needle[j] == mBuffer.GetByte(s + j))
{
j-- ;
}

if(j < 0)
{
// s holds our position in bytes
return mBuffer.ConvertByteToPosition(s) ;
}
else
{
ssize_t b = j - badchars[mBuffer.GetByte(s + j)] ;
s += Max(1, b) ;
}
}

return GetTextSize() ;
}


Подробнее здесь: https://stackoverflow.com/questions/502 ... e-horspool

Вернуться в «C++»