我想知道是否有任何有效的算法可以在大的二进制文件中查找小二叉树的集合S = {t_1,t_2,...,t_n}的匹配-tree T?这里的二叉树是有序和标记的,即每个节点都有一个标签,左/右子节点不能交换。
T中t_i的“匹配”表示T的子树(连通分量)与t_i相同。
天真的方法是扫描T的每个节点并尝试逐个匹配t_1,t_2,....我在想是否有类似 Aho-Croskik 字符串匹配算法的东西,它通过线性时间复杂度来定位长文本中的一组短字符串(模式)(wrt是所有模式的长度之和)字符串和文字。)
提前致谢。任何指向参考等的指针也将非常感激!
答案 0 :(得分:0)
根据顺序和后序(或预订)遍历字符串表示子树和大树。如果您发现inorder,postorder(或preorder)字符串都是inorder的子字符串,大树的后序排序则存在匹配(您可以在线性时间复杂度中使用kmp来检查它是否是子字符串)。