Python字符串';在';算子实现算法与时间复杂度

Python字符串';在';算子实现算法与时间复杂度,python,string,algorithm,cpython,Python,String,Algorithm,Cpython,例如,我正在思考中的操作符是如何实现的 >>> s1 = 'abcdef' >>> s2 = 'bcd' >>> s2 in s1 True 在CPython中,使用哪种算法来实现字符串匹配,时间复杂度是多少?有关于这方面的官方文件或维基吗?它是和的组合 您可以查看C代码: 快速搜索/计数实现,基于Boyer Moore和Horspool的混合,顶部还有一些铃铛和哨子。有关更多背景信息,请参阅: 从上面的链接: 在设计新算法时,我使用了以下

例如,我正在思考中的
操作符是如何实现的

>>> s1 = 'abcdef'
>>> s2 = 'bcd'
>>> s2 in s1
True
在CPython中,使用哪种算法来实现字符串匹配,时间复杂度是多少?有关于这方面的官方文件或维基吗?

它是和的组合

您可以查看C代码:

快速搜索/计数实现,基于Boyer Moore和Horspool的混合,顶部还有一些铃铛和哨子。有关更多背景信息,请参阅:

从上面的链接:

在设计新算法时,我使用了以下约束:

  • 对于所有测试用例(基于真实代码),包括Jim Hugunin的最坏测试用例,应该比当前的暴力算法更快
  • 设置开销小;快速路径中没有动态分配(O(m)表示速度,O(1)表示存储)
  • 良好情况下的次线性搜索行为(O(n/m))
  • 在最坏情况下,不比当前算法差(O(nm))
  • 对于8位字符串和16位或32位Unicode字符串(无O(σ)依赖项)都应能很好地工作
  • 很多现实生活中的搜索应该是好的,很少是最坏的
  • 合理简单的实现

感谢您的快速回复!根据这篇文章,时间复杂度是次线性的,这比KMP算法要好。@Mitchellc在最好的情况下,它可以是次线性的。@arshajiii是的,这就是我想要的。再次感谢@阿尔沙吉还有一个问题,你知道什么时候会有好的案子发生吗?我想不出来。thx@mitchelllc可能当不经常出现“错误部分匹配”时,例如“bcdefg”和搜索“fg”,而不是在“aaaacaaab”中查找“aab”,有人能告诉我为什么KMP没有用于此实现吗?