搜索字符串的数据结构

时间:2013-08-03 18:39:44

标签: c# string search tree

我正在寻找以下案例的最佳数据结构: 在我的情况下,我将有数千个字符串,但是对于这个例子,我将使用两个明显的原因。所以,假设我有字符串“Water”和“Walter”,我需要的是当字母“W”输入两个要找到的字符串时,当“Wat”输入“Water”时才是唯一的结果。我做了一个研究但是我仍然不太确定这种情况下哪个是正确的数据结构,如果我不确定这会浪费时间,我不想实现它。所以基本上我现在想的是“Trie”或“Suffix Tree”。似乎“Trie”会做到这一点,但正如我所说,我需要确定。另外,实现应该不是问题所以我只需要知道正确的结构。如果有更好的选择,也可以随时告诉我。你可以猜到像Dictionary / MultiDictionary这样的常规结构不会起作用,因为它会成为一个记忆杀手。我还计划实现缓存以限制内存消耗。对不起,没有代码,但我希望我能得到答案。提前谢谢。

2 个答案:

答案 0 :(得分:2)

您应该使用Trie。尝试是最快的已知排序算法之一(burstsort)的基础,它也用于拼写检查,并用于使用文本完成的应用程序。您可以查看详细信息here

答案 1 :(得分:1)

实际上,如果你想做自动建议,那么存储多达3-4个字符就足够了。 我的意思是建议当用户输入“a”或“ab”或“abc”时以及他键入“abcd”或更多字符的那一刻,你可以使用以“abcd”开头的map.keys,使用c#语言支持lamda表达式。< / p>

因此,我建议,创建一个如下地图: Map&lt; char,&lt; Map&lt; char,Map&lt; char,Set&lt; string&gt;&gt;&gt;&gt;&gt;地图; 因此,如果用户输入“a”,您将查找地图[a]并查找所有孩子。