String 树搜索算法

String 树搜索算法,string,algorithm,search,graph,tree,String,Algorithm,Search,Graph,Tree,我正在寻找关于搜索树状数据结构的策略的建议 结构是一个树,其中每个元素是一个字符串,每个分支是一个句点,路径是从根开始的几个字符串和句点的串联。根和根的边是一种特殊情况,它们后面没有字符串 所以考虑到这棵树, 有效路径是字符串“A”、“A.B”、“A.C”、“X”和“X.Y” 我们拥有的是一组字符串,我们需要在此树中搜索这些字符串,并找到终止每个字符串的元素。并非集合中的所有字符串都显示在树中。当我们找到所有字符串时,我们停止搜索。我们需要多次运行此搜索,但每次的树可能不同。要搜索的字符串集

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

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

所以考虑到这棵树,

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

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

目前我们使用的是深度优先搜索,但是如果所有字符串都在根下的最后一个分支下,那么这不是很有效。我觉得应该有更好的方法


做这种重复搜索的好算法是什么?这里也可以利用多线程吗?

这是一个有趣的问题;通常人们会想象一棵树正在搜索一组可变的字符串。这里的情况正好相反:字符串集是固定的,树是高度可变的


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

每个节点的子节点是否总是按字母顺序排列?树总是平衡的吗?树是不平衡的,节点不是按字母顺序排列的。
        {root}
      /       \
    A          X
  /   \      /
B       C   Y