python中str.find的最坏情况时间复杂度

python中str.find的最坏情况时间复杂度,python,c,string,algorithm,time-complexity,Python,C,String,Algorithm,Time Complexity,问题已经在标题中,如果n是字符串的长度,m是子字符串的长度,那么Python中str.find(string,substring)的C实现的最坏时间复杂度是多少?源代码()似乎讨论了boyer-moore-horspool算法,根据Wikipedia,该算法的最坏情况复杂性为O(m*n) EDIT:O(m*n)是指boyer-moore-horspool算法的运行时间,该算法查找字符串中出现的所有子字符串。Python的str.find方法只查找子字符串的一次出现,因此(str.find)将取决

问题已经在标题中,如果n是
字符串的长度,m是
子字符串的长度,那么Python中
str.find(string,substring)
的C实现的最坏时间复杂度是多少?源代码()似乎讨论了boyer-moore-horspool算法,根据Wikipedia,该算法的最坏情况复杂性为O(m*n)

EDIT:O(m*n)是指boyer-moore-horspool算法的运行时间,该算法查找字符串中出现的所有子字符串。Python的
str.find
方法只查找子字符串的一次出现,因此(
str.find
)将取决于子字符串第一次出现的位置。所以没有,我还没有公布答案

这似乎是在谈论boyer-moore-horspool算法,根据维基百科,该算法的最坏情况复杂度为O(m*n)

对于CPython,您的答案是
O(m*n)
。一般来说,它显然依赖于实现


编辑:是的,如果你已经做了研究,我想知道你为什么要问这个问题。

他们还提供了一个链接,让你了解更多的背景,你的实际问题是什么,你已经在你链接到的文档中找到了答案?如果你有很多重复的子字符串,那么寻找单个子字符串仍然是O(mn)。约束条件下的链路状态*不比最坏情况下的当前算法差(O(nm)),许多现实生活中的搜索应该是好的,最坏情况下应该很少,这使得很明显存在可能是O(nm)的情况。在总是线性或次线性的情况下,需要构建表,除非字符串很长,否则构建成本将超过复杂性;在快速路径中没有动态分配(O(m)表示速度,O(1)表示存储),因此显然存储量不多。Python可以根据字符串的条件使用更好的算法,但对于简单的方法,它是最坏的情况O(m*n)——你可能会发现这是一个有趣的阅读,我不太确定,因为博耶-摩尔算法的维基百科条目说有一个优化(“Galil规则”),在最坏的情况下会产生线性时间