在具有父 ID 的一般树中查找最低共同祖先

finding the Lowest Common Ancestor in a general tree having the parent Ids

本文关键字:查找 祖先 ID      更新时间:2023-10-16

我的诀窍是找到一个通用树的LCA,该树将从txt文件中的列表创建。我正在寻找最有效的实施。 数据的形式为:Id, info, ParentId

数据不以任何方式排序。我正在考虑创建一棵树,但这至少需要 O(nlogn)。虽然日志基数不是 2。我想这取决于平均儿童的数量。

相反,如果我将节点存储在哈希表中,那么找到LCA会比O(nlogn)更好。右?对于目标节点的每个父节点,我必须检查源节点是否访问过它(假设我们从源节点开始到根节点,并将途中的所有父节点标记为已访问),这需要 O(logn)。因为,我们只是检查父母,它会比O(nlogn)更好。

有什么更好的主意吗?

假设你的树在某种程度上是平衡的,即O(logn)高度,你的哈希表数据结构应该给出一个O(n)算法。

从源和目标到根的第一个跟踪。您将有两条长度为 O(logn) 的路径。例如SXYZR和DWYZR。S 和 D 是源和目标。R 是根。这需要 O(logn) 时间。

然后你可以找到最长的后缀,即 YZR。Y 将是 LCA。这需要 O(logn) 时间。

请记住,您需要 O(n) 时间来读取输入并构建哈希表。