【发布时间】:2013-01-29 16:18:41
【问题描述】:
想象一个如下的有向无环图,其中:
- “A”是根(总有一个根)
- 每个节点都知道它的父节点
- 节点名称是任意的 - 无法从中推断出任何内容
- 我们从另一个来源得知,节点按 A 到 G 的顺序添加到树中(例如,它们是版本控制系统中的提交)
我可以使用什么算法来确定两个任意节点的最低共同祖先 (LCA),例如,以下的共同祖先:
- B 和 E 是 B
- D 和 F 是 B
注意:
- 从根到给定节点不一定只有一条路径(例如“G”有两条路径),所以你不能简单地traverse paths from root to the two nodes and look for the last equal element
- 我发现了树的 LCA 算法,尤其是二叉树,但它们不适用于这里,因为一个节点可以有多个父节点(即这不是一棵树)
【问题讨论】:
-
你的意思是'无环'。 “父母”是指所有具有指向相关节点的有向边的节点吗?
-
所有节点都有指向其父节点的边,如果有的话(例如 A 没有父节点)。 AFAIK 由于循环 G-F-E-B-C-D-G,该图是循环的。
-
如果你把这个问题发在这里:cs.stackexchange.com,你肯定会得到更多更好的答案。
-
问题就变成了理解答案... ;-)
-
@AndrewSwan:如果该图是无向的,它将是循环的。在当前状态下,它是非循环的。
标签: algorithm graph directed-acyclic-graphs lowest-common-ancestor