Vb.net 在大字符串中搜索小字符串
我正在做一个项目,我必须在一个非常非常大的字符串中搜索一个小字符串(大约40个字符)(我们说的是大约一亿个字符)。我正在寻找最快的方法。我尝试了几种方法:以下是基准测试的结果:Vb.net 在大字符串中搜索小字符串,vb.net,string,Vb.net,String,我正在做一个项目,我必须在一个非常非常大的字符串中搜索一个小字符串(大约40个字符)(我们说的是大约一亿个字符)。我正在寻找最快的方法。我尝试了几种方法:以下是基准测试的结果: 包含248毫秒内返回的真 IndexOf在671毫秒内返回True(我决不会这么说!) 仅在48 ms中包含使用数组而不是返回的字符串的True 尽管数组中的包含似乎是最好的方法,但我也研究了一些搜索算法(,和),但它们似乎都不适合我的场景 我的问题是:有没有一种更快的方法在一个非常大的字符串中搜索一个小字符串 谢谢
包含248毫秒内返回的
真
李>
在671毫秒内返回IndexOf
(我决不会这么说!)李>True
仅在48 ms中包含使用数组而不是返回的字符串的
李>True
包含似乎是最好的方法,但我也研究了一些搜索算法(,和),但它们似乎都不适合我的场景
我的问题是:有没有一种更快的方法在一个非常大的字符串中搜索一个小字符串
谢谢
PWhite如果您有一个固定的、巨大的字符串,您希望重复搜索非常小的子字符串,那么您可能希望搜索实现or的库。一旦完成了构建后缀树或数组的预处理工作,搜索长度为P的模式的运行时是后缀树的O(P)和后缀树的O(P+logt),其中T是长文本字符串的长度。这可能比您现在看到的要快得多,不过您需要更重的库来实现这一点
另一方面,如果有一组固定的模式字符串和一组旋转的大字符串要搜索,则可能需要使用,它可以在时间O(T+z)内扫描长度为T的字符串中固定模式集的所有出现,其中z是匹配数。这在实践中通常是非常快的。这就引出了一个问题,您首先是如何获得非常大的字符串的?…如何使用数组显示“Contains”大小写的?您的结果似乎有些奇怪。您是在多线程中运行的吗?@莲花包含调用IndexOf
和StringComparison.Ordinal
比较类型,这可能就是它更快的原因。尝试优化这一点表明您将不止一次地这样做。你会在同一个巨大的字符串中搜索多个单词吗?关于这个巨大的字符串是什么,它是如何创建的,或者你为什么要搜索它,还有什么可以帮助你找到一种搜索方法,而不仅仅是暴力?