Страницы

Поиск по вопросам

среда, 31 октября 2018 г.

Алгоритм метода count в Python 3

Какой алгоритм использовали разработчики в методе count для строки в Python 3? Какая сложность этого алгоритма?


Ответ

Для стандартной реализации интерпретатора Python, т.е. CPython, насколько я понимаю, верно следующее:
Для поиска количества вхождений паттерна в строку используется алгоритм Бойера — Мура. Так как count возвращает количество неперекрывающихся вхождений подстроки в строку, то сложность работы алгоритма Бойера — Мура будет составлять O(n + m), где n + m — это сумма длин строки и паттерна.

Я не очень хорошо разбираюсь в структуре исходного кода CPython, но очень похоже, что метод count действительно описан в файле count.h, приведённом @Suvitruf. Функция, описанная в нём, содержит единственный вызов -- вызов функции FASTSEARCH, описание которой я нашёл в файле fastsearch.h, которая содержит вариант алгоритма Бойера — Мура.

Источники:
исходный код count.h исходный код fastsearch.h описание алгоритма Бойера — Мура и его вариаций на википедии

Комментариев нет:

Отправить комментарий