【问题标题】:What is the Time Complexity, Space complexity and Algorithm for strstr() function in C++?C++中strstr()函数的时间复杂度、空间复杂度和算法是什么?
【发布时间】:2016-03-20 22:03:46
【问题描述】:

我很好奇在 C++ 中使用默认的老式 strstr() 函数的成本。它的时间和空间复杂度是多少?它使用哪种算法? 我们还有其他具有以下最坏情况时间和空间复杂度的算法: 设 n = 字符串长度,m = 模式长度

  1. Knuth-Morris-Pratt 算法:时间 = O(n+m),空间 = O(m)
  2. Rabin-Karp 算法:时间 = O(n*m),空间 = O(p)(p = p 组合长度为 m 的模式)
  3. 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


【解决方案1】:

在 C 标准中,它只是在 §7.24.5.7 中说:

概要

 #include <string.h>
 char *strstr(const char *s1, const char *s2);

说明

strstr 函数定位字符序列中 s1 指向的字符串中的第一个匹配项(不包括 s2指向的字符串中的终止空字符)。

返回

strstr 函数返回一个指向已定位字符串的指针,如果未找到该字符串,则返回一个空指针。如果 s2 指向 长度为零的字符串,函数返回s1。

所以复杂性是未指定的。据我所知,允许实现使用这些算法中的任何一种。

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 2021-01-23
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2016-02-13
    • 2013-09-12
    • 2016-12-20
    • 2020-04-02
    相关资源
    最近更新 更多