我有一个大型的数据集合,在这种情况下,想象一下所有包含文件路径的80,000+数组String
。子串索引许多类似的字符串
作为文件路径,这意味着它们的大群组以相同的路径开始,例如,我有超过50,000个文件从"/dataset1/subsetAA/childX/"
开始。
我想允许自由文本搜索这些路径。现在我做一个简单的断言,看起来像这样:
foreach(String term in terms)
if(path.IndexOf(term, StringComparison.OrdinalIgnoreCase) == -1)
return false;
return true;
我保存的搜索结果,因为它们可以键入,所以你越键入它变得更快,但是最初的几个搜索(例如“f
”>“fo
”>“foo
”)在快速机器上可能需要3或4秒。
我想建立一个子串索引,消除了我需要使用IndexOf
,最好是利用通用路径来减少索引大小,我不想消耗太多的内存。
这有帮助,但是如何从任何节点搜索Trie?例如如果“foo”和“foz”在Trie中,我怎样才能搜索“oz”,而无需首先为每个“o”详尽搜索树,或者这是不可避免的? (尽管我可以低效地使用'Dictionary>'来查找起点)。有什么想法吗? –
Dai
2013-03-14 06:43:43
尝试不设计为从任何节点启动。更多的思考问题,我很喜欢dasblinkenlight的答案:) – Patashu 2013-03-14 07:44:52