【发布时间】:2011-04-27 21:26:43
【问题描述】:
如何在包含 4000 万字的列表中快速搜索?
我需要找到至少包含我在继续之前指定的 4 个字母的单词。
示例:列表中有几个单词:
dogging
dopping
baobabisaneviltree
字符串格式“odxxini”的我的特定字母。我需要从我的字符串中找到包含任何 (4+) 个字符的任何单词。
结果:
dopping
dogging
(因为,这两个词都包含 'o' 'd' 'i' 'n') 我希望我解释得很好。对不起英语。请改正错误。
如果有人对这个问题有任何了解,我会很高兴听到他的声音。 :)
到目前为止我写了(因为它是开始..)这段代码:
private void seeksearcher()
{
double counter = 0, k=0;
double licznik = (double)listwords.Capacity;
char[] letterarray = stringletters.ToCharArray();
foreach(String word in listwords)
{
for(int i=0;i<letterarray.Length;i++)
if(word.Contains(letterarray[i]))
counter++;
if(counter > 4)
textBox2.Text+=word + Environment.NewLine;
}
}
我很确定现在的复杂度是 n*7n,它的丑陋大:(
【问题讨论】:
-
在您的字典上创建(和使用)索引将加快您的搜索速度
-
字符串“iixx”是否与示例匹配?也就是说,包含两次“x”是否意味着搜索字符串中的两个“x”会算作两个匹配的字母?
-
我相信你的复杂度更高
n * m,其中n是列表的长度,m是搜索字符串的长度。 -
@Jeffrey L Whitledge 如果我的特定字符串中有两个 xx(当然是我切到 char 数组的那个字符串),这意味着“可以”这个词有两个 x,但是我想找到包含我的特定字符串中尽可能多的字母的单词。每个使用过的字母都不会再用在那个词里了。
-
@Michal,不,我的意思是它会像 40,000,000 * 8,使用您的单词列表和搜索字符串的假设长度。实际上,你知道吗,更多的是
n * m * k,列表长度 * 单词长度 * 搜索字符串长度。但我可能是错的。
标签: c# list dictionary