我正在寻找有关搜索树状数据结构的策略的建议。
结构是一棵树,其中每个元素都是一个字符串,每个分支都是一个句点,一个路径是从根开始的几个字符串和句点的串联。根的根和边是一种特殊情况,其背后没有字符串。
所以给了树,
{root}
/ \
A X
/ \ /
B C Y
{root}
/ \
A X
/ \ /
B C Y
有效路径是字符串“A”,“A.B”,“A.C”,“X”和“X.Y”。
我们拥有的是一组字符串,我们需要在此树中搜索并找到终止每个字符串的元素。并非集合中的所有字符串都显示在树中。当我们找到所有字符串时,我们停止搜索我们需要多次运行此搜索,但树木每次都可能不同。每次运行时,要搜索的字符串集都是相同的。
目前我们正在使用深度优先搜索,但如果所有字符串都位于根目录下的最后一个分支之下,则效率不高。我觉得应该有更好的方法来做到这一点。
进行重复搜索的好算法是什么?是否可以在这里利用多线程?
答案 0 :(得分:0)
这是一个有趣的问题;通常可以想象一个树正在搜索一组可变的字符串。这种情况正好相反:字符串集是固定的,树变化很大。
我认为您可以做的最好的事情是构建一个代表字符串集的trie。这样,您只需要为任何给定的前缀搜索一次树。 (因此,对于您提到的示例字符串,您只需要找到" A"前缀一次,并且" X"前缀一次。)有许多trie数据结构和算法从一组字符串构建它们,但由于这是对这个问题的一次性操作,我不会太担心这个预处理的成本。