Какой алгоритм используется в std :: search? - PullRequest
3 голосов
/ 06 февраля 2012

Существует множество алгоритмов сопоставления строк, которые можно использовать для поиска шаблона (строки) в большом тексте, например Бойера-Мура, Ахо-Корасика и т. Д.

Какой алгоритм сопоставления строк применяется для реализации std::search функция в C ++?

1 Ответ

10 голосов
/ 06 февраля 2012

Согласно стандарту C ++ 03 ISO, §25.1.9 / 3, сложность std::search равна

Сложность: Максимум (последний1 - первый1) * (последний2 - первый2) приложения соответствующего предиката

Это единственное требование к реализации этого алгоритма.Спецификация ISO не определяет, какой алгоритм должен использоваться здесь, и полностью зависит от реализации.Эти временные границы позволяют использовать наивный алгоритм поиска последовательности, Кнут-Моррис-Пратт , Бойер-Мур и Рабин-Карп .Чтобы узнать, какая из них используется, вам, вероятно, следует найти документацию для той версии стандартной библиотеки, которую вы используете.Тем не менее, вы не можете рассчитывать на то, что портативность.Я предполагаю, что большинство реализаций просто используют алгоритм наивного сопоставления, так как наихудший случай обычно не возникает на практике.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...