什么算法.Net用于搜索字符串中的模式?

Hun*_*hpu 8 .net c# algorithm

我现在正在研究字符串搜索算法,并想知道.NET String.Contains函数用于什么算法.Reflector显示使用了这个函数,但我不知道它的名字是什么意思.

private static extern int InternalFindNLSStringEx(IntPtr handle, string localeName, int flags, string source, int sourceCount, int startIndex, string target, int targetCount);
Run Code Online (Sandbox Code Playgroud)

Kon*_*lph 9

它只是通过文本和模式的嵌套循环实现的天真字符串搜索实现,具有O(n·m)运行时.

特别是,MSDN没有指定此方法的性能,因此假设更好的性能是不安全的.

此外,最先进的模式搜索方法是比较专业的某些字符串类型,虽然有更好的通用搜索算法,实现一个以String.IndexOf在一定程度上不必要的优化.

原因很简单:如果您需要有效的模式搜索,那么无论如何您都将实现自己的,自定义以适合您的特定数据.所以没有必要在通用库中实现一些奇特的东西.


截至2016年(现在可以使用Core CLR源代码),实现仍然使用一个简单的嵌套循环.这是在NewApis::IndexOfString和中实现的NewApis::FastIndexOfString,InternalFindNLSStringEx从托管String.ContainsString.IndexOf函数调用(via ).

  • 我完全同意;如果库中已有通用字符串搜索,为什么还要实现自己的通用字符串搜索呢?此外,字符串搜索算法是例外,因为 Boyer-Moore 非常好(没有缺点),被视为标准基准。我的意思是说,通常为库选择算法可能非常困难,但是对于字符串,我不希望在任何有价值的库中使用更少的东西。如果我错了,请纠正我。 (2认同)