Algorithm 在另一个大二叉树中匹配多个二叉树

Algorithm 在另一个大二叉树中匹配多个二叉树,algorithm,data-structures,tree,pattern-matching,string-matching,Algorithm,Data Structures,Tree,Pattern Matching,String Matching,我想知道是否有任何有效的算法可以为大二叉树t中的小二叉树集S={t_1,t_2,…,t_n}找到匹配项?这里的二叉树是有序的和有标签的,即每个节点都有一个标签,左/右子节点不能交换 t中t_i的匹配意味着有一个子树,它是t的连通部分,与t_i相同 简单的方法是扫描T的每个节点,并尝试逐个匹配T_1,T_2。我在想,是否有类似于Aho-Croskik字符串匹配算法的东西,该算法通过线性时间复杂度w.r.t在长文本中定位一组短字符串模式,即所有模式字符串和文本的长度之和 提前谢谢。如有任何参考资料等

我想知道是否有任何有效的算法可以为大二叉树t中的小二叉树集S={t_1,t_2,…,t_n}找到匹配项?这里的二叉树是有序的和有标签的,即每个节点都有一个标签,左/右子节点不能交换

t中t_i的匹配意味着有一个子树,它是t的连通部分,与t_i相同

简单的方法是扫描T的每个节点,并尝试逐个匹配T_1,T_2。我在想,是否有类似于Aho-Croskik字符串匹配算法的东西,该算法通过线性时间复杂度w.r.t在长文本中定位一组短字符串模式,即所有模式字符串和文本的长度之和


提前谢谢。如有任何参考资料等,也将不胜感激

根据顺序和后序或前序遍历字符串表示子树和大树。如果您发现inorder、postorder或preorder字符串都是大树的inorder、postorder的子字符串,则存在一个匹配。您可以在线性时间复杂度中使用kmp检查它是否为子字符串。

也许您可以使用顺序遍历写下树,然后使用字符串匹配。按照你的建议和阿霍·科拉西克在一起。请记住,即使树的顺序遍历是大树的子字符串,但这并不意味着树是匹配的。尽管如此,这应该会优化我认为的简单方法,如果将每个子树插入括号中,顺序遍历到字符串的想法效果会更好;那么匹配的子字符串就是匹配树。