【发布时间】:2015-02-07 21:22:21
【问题描述】:
我正在做一个项目,我必须在一个非常大的字符串(我们说的是大约一亿个字符)中搜索一个小字符串(大约 40 个字符)。我正在寻找最快的方法。我尝试了几种方法:这些是基准测试的结果:
-
Contains在 248 毫秒 内返回True; -
IndexOf在 671 毫秒 内返回True(我绝不会这么说!); -
Contains使用数组而不是字符串,仅在 48 毫秒 内返回True;
尽管数组中的Contains 似乎是最好的方法,但我也看过一些搜索算法(Knuth–Morris–Pratt、Rabin-Karp 和Boyer-Moore),但它们似乎都没有适合我的场景
我的问题是:有没有更快的方法在一个很大的字符串中搜索一个小字符串?
谢谢,
PWhite
【问题讨论】:
-
这只是引出了一个问题,你是如何获得非常大的字符串的?...
-
“包含使用数组”的情况如何?
-
Contains just call IndexOf,您的结果似乎很奇怪。你在多线程中运行吗?
-
@the_lotus
Contains使用IndexOf比较类型调用IndexOf,这可能是它更快的原因。 -
尝试优化这表明您将不止一次这样做。您会在同一个大字符串中搜索多个单词吗?关于这个巨大的字符串是什么,它是如何创建的,或者你为什么要搜索它,你还有什么可以告诉你的,这可以帮助你找到一种搜索方式,而不仅仅是暴力破解?