【发布时间】:2016-03-20 22:03:46
【问题描述】:
我很好奇在 C++ 中使用默认的老式 strstr() 函数的成本。它的时间和空间复杂度是多少?它使用哪种算法? 我们还有其他具有以下最坏情况时间和空间复杂度的算法: 设 n = 字符串长度,m = 模式长度
- Knuth-Morris-Pratt 算法:时间 = O(n+m),空间 = O(m)
- Rabin-Karp 算法:时间 = O(n*m),空间 = O(p)(p = p 组合长度为 m 的模式)
- Boyer-Moore 算法:时间 = O(n*m),空间 = O(S)(S = 字符集大小) 就时间和空间复杂性而言,strstr() 是否比上述算法更好?
【问题讨论】:
-
基本上没有指定。我知道,这不是一个非常令人满意的答案。您有想要了解的具体实现吗?
-
我的意思是函数的特定实现,或 C 标准库。例如,Gnu libc 中的那个,MS Visual Studio 使用的那个,还是其他的?
-
对不起..我没有BoB..
-
glibc 正在使用 KMP,请参阅 strstr.c source file,尽管它已通过一些 sse2 优化进行了修改。
标签: c++ algorithm string-search