在对象树中找到最大高度重复子树的有效方法

计算科学 算法 表现
2021-12-24 15:17:23

我正在尝试解决在对象树中找到最大重复子树的问题。

通过对象树,我的意思是一棵树,其中每个叶子和节点都有一个名称。每个叶子都有一个类型和一个与该叶子相关联的该类型的值。每个节点都有一组按一定顺序的叶子/节点。

给定一个任意对象树——我们知道——其中有一个重复的子树。

重复是指 2 个或更多子树,它们在所有方面(名称/类型/子元素的顺序)都相似,但叶子的值。子树之间不能共享节点/叶子。

问题是识别这些最大高度的子树。

我知道详尽的搜索可以解决问题。我宁愿寻找更有效的方法。

1个回答

对于树中的每个非叶节点,对其名称/顺序及其有序子节点的哈希值进行哈希处理。如果一个节点是一个叶子,那么它的散列就是它的名称/类型。这给出了一个 O(N) 算法来获取所有高度和子树哈希。接下来,您可以按高度递减的顺序遍历树,直到找到与您之前看到的哈希匹配的哈希——这是您的目标匹配。所以整个算法是O(N)。