树搜索算法

时间:2015-06-02 18:08:18

标签: string algorithm search graph tree

我正在寻找有关搜索树状数据结构的策略的建议。

结构是一棵树,其中每个元素都是一个字符串,每个分支都是一个句点,一个路径是从根开始的几个字符串和句点的串联。根的根和边是一种特殊情况,其背后没有字符串。

所以给了树,

        {root}
      /       \
    A          X
  /   \      /
B       C   Y

{root} / \ A X / \ / B C Y

有效路径是字符串“A”,“A.B”,“A.C”,“X”和“X.Y”。

我们拥有的是一组字符串,我们需要在此树中搜索并找到终止每个字符串的元素。并非集合中的所有字符串都显示在树中。当我们找到所有字符串时,我们停止搜索我们需要多次运行此搜索,但树木每次都可能不同。每次运行时,要搜索的字符串集都是相同的。

目前我们正在使用深度优先搜索,但如果所有字符串都位于根目录下的最后一个分支之下,则效率不高。我觉得应该有更好的方法来做到这一点。

进行重复搜索的好算法是什么?是否可以在这里利用多线程?

1 个答案:

答案 0 :(得分:0)

这是一个有趣的问题;通常可以想象一个树正在搜索一组可变的字符串。这种情况正好相反:字符串集是固定的,树变化很大。

我认为您可以做的最好的事情是构建一个代表字符串集的trie。这样,您只需要为任何给定的前缀搜索一次树。 (因此,对于您提到的示例字符串,您只需要找到" A"前缀一次,并且" X"前缀一次。)有许多trie数据结构和算法从一组字符串构建它们,但由于这是对这个问题的一次性操作,我不会太担心这个预处理的成本。