Какой алгоритм использовали разработчики в методе count для строки в Python 3? Какая сложность этого алгоритма?
Ответ
Для стандартной реализации интерпретатора Python, т.е. CPython, насколько я понимаю, верно следующее:
Для поиска количества вхождений паттерна в строку используется алгоритм Бойера — Мура. Так как count возвращает количество неперекрывающихся вхождений подстроки в строку, то сложность работы алгоритма Бойера — Мура будет составлять O(n + m), где n + m — это сумма длин строки и паттерна.
Я не очень хорошо разбираюсь в структуре исходного кода CPython, но очень похоже, что метод count действительно описан в файле count.h, приведённом @Suvitruf. Функция, описанная в нём, содержит единственный вызов -- вызов функции FASTSEARCH, описание которой я нашёл в файле fastsearch.h, которая содержит вариант алгоритма Бойера — Мура.
Источники:
исходный код count.h
исходный код fastsearch.h
описание алгоритма Бойера — Мура и его вариаций на википедии
Комментариев нет:
Отправить комментарий