【发布时间】:2014-10-10 14:29:11
【问题描述】:
任务
我有一个 S 的集合 n = 10,000,000 个字符串 s 并且需要找到集合 Sp 包含字符串 s 的 S 包含子字符串 p。
简单的解决方案
由于我使用的是 C#,因此使用 LINQ 是一项非常简单的任务:
string[] S = new string[] { "Hello", "world" };
string p = "ll";
IEnumerable<string> S_p = S.Where(s => s.Contains(p));
问题
如果 S 包含许多字符串(如提到的 10,000,000 个字符串),这会变得非常慢。
想法
建立某种索引以更快地检索 Sp。
问题
为这个任务索引 S 的最佳方法是什么?你有 C# 中的任何实现吗?
【问题讨论】:
-
你的集合 S 是常数吗?有多少个不同的 p 与相同的 S 一起使用?
-
是的,S 是常数。我将为 S 使用数千种不同的 p。这是一个搜索引擎,但内容不会改变。
-
你考虑过 lucene.net 吗?
-
不,我还没有。但乍一看,这似乎不是我想要的。我想要一个轻量级的解决方案,尽可能少的外部依赖。最好是一个单一的、小型的 C# 类。
标签: string algorithm indexing substring