为什么String.indexOf()不使用KMP?
我阅读的源代码,java.lang.String
很惊讶地发现它String.indexof()
不使用Knuth–Morris–Pratt算法?众所周知,KMP更有效。那么为什么不使用它String.indexOf()
呢?
我周围的人告诉我,对于短字符串KMP来说已经足够了,但是如果您需要性能并且打算与大字符串一起使用,则不是一个好选择。但是他没有告诉我细节。
所以,这是我的问题:
- 为什么我们不使用KMP
String.indexOf()
? - 为什么KMP对于大字符串不是一个好选择?
回答:
KMP在最坏情况下具有更好的性能,但实际上需要进行一些前期计算(以生成偏移表)。这 还 需要一个初始的内存分配,这也可能会影响性能。
对于(大概)在较短字符串中进行搜索的常见用例,这实际上可能比原始实现要慢。
这与以下事实捆绑在一起:对于非常庞大的数据集,您可能将使用更专业的数据结构,而不是简单的String
方法,这意味着增加的实现(可能还有运行时)成本不值得投资。
请注意,由于未指定实际算法,因此在将来的Java版本中这 可能会 更改。
以上是 为什么String.indexOf()不使用KMP? 的全部内容, 来源链接: utcz.com/qa/414676.html