gpt4 book ai didi

c# - 包含的有效搜索

转载 作者:太空宇宙 更新时间:2023-11-03 13:38:01 25 4
gpt4 key购买 nike

我有一个 Trie 数据结构,它可以在眨眼间搜索 100 000 个元素。但是它只搜索以搜索字符串开头的单词,例如“Fi”会找到“Final”但不会找到“GooFi”,我希望它也返回“GooFi”。这就是为什么我在这里问你们在这种情况下这是否是正确的结构。我自己实现了它,编写了单元测试,所以到目前为止它一直在工作。我需要的是如何实现我的目标的提示,我不想让任何人为我编写代码,这不是我来这里的原因。无论如何,这是我的搜索实现:

public List<string> Seach(string word)
{
List<string> results = new List<string>();
this.DoSearch(this.Root, 0, new StringBuilder(word), results);
return results;
}

private void DoSearch(TrieNode currentNode, int currentPositionInWord, StringBuilder word, List<string> results)
{
if (currentPositionInWord >= word.Length)
{
this.DfsForAllWords(currentNode, word, results);
return;
}

char currentChar = word[currentPositionInWord];

bool containsKey = currentNode.Children.ContainsKey(currentChar);
if (containsKey)
{
if (currentPositionInWord == word.Length - 1)
{
results.Add(word.ToString());
}

TrieNode child = currentNode.Children[currentChar];
this.DoSearch(child, ++currentPositionInWord, word, results);
}
}

private void DfsForAllWords(TrieNode currentNode, StringBuilder word, List<string> results)
{
foreach (var node in currentNode.Children.ToArray())
{
word.Append(node.Value.Value);
if (node.Value.IsWord)
{
results.Add(word.ToString());
}

this.DfsForAllWords(node.Value, word, results);
word.Length--;
}
}

非常感谢任何帮助。

最佳答案

您可以在所有节点上使用一种索引。

Dictionary<char,List<TrieNode>> nodeIndex;

现在,如果您想搜索“Fi”,请迭代 nodeIndex和以前一样搜索。如果您在该迭代中找到了某些内容,则必须在找到的子字符串前添加指向实际节点的字符串。

public List<string> Seach(string word)
{
List<string> results = new List<string>();

foreach(var node in nodeIndex[word[0]])
{
List<string> nodeResults = new List<string>();

this.DoSearch(node, 0, new StringBuilder(word), nodeResults);

foreach(var nodeResult in nodeResults)
{
var text = string.Format("{0}{1}",node.Parent.Text, nodeResult);
results.Add(node.Parent.Text, nodeResult);
}
}

return results.Distinct().ToList();
}

也许您还需要实现一些尚未实现的属性。

关于c# - 包含的有效搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18063802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com