为什么String.indexOf()不使用KMP?

我阅读的源代码,java.lang.String很惊讶地发现它String.indexof()不使用Knuth–Morris–Pratt算法?众所周知,KMP更有效。那么为什么不使用它String.indexOf()呢?

我周围的人告诉我,对于短字符串KMP来说已经足够了,但是如果您需要性能并且打算与大字符串一起使用,则不是一个好选择。但是他没有告诉我细节。

所以,这是我的问题:

  1. 为什么我们不使用KMP String.indexOf()
  2. 为什么KMP对于大字符串不是一个好选择?

回答:

KMP在最坏情况下具有更好的性能,但实际上需要进行一些前期计算(以生成偏移表)。这 需要一个初始的内存分配,这也可能会影响性能。

对于(大概)在较短字符串中进行搜索的常见用例,这实际上可能比原始实现要慢。

这与以下事实捆绑在一起:对于非常庞大的数据集,您可能将使用更专业的数据结构,而不是简单的String方法,这意味着增加的实现(可能还有运行时)成本不值得投资。

请注意,由于未指定实际算法,因此在将来的Java版本中这 可能会 更改。

以上是 为什么String.indexOf()不使用KMP? 的全部内容, 来源链接: utcz.com/qa/414676.html

回到顶部