【发布时间】:2021-10-20 17:18:56
【问题描述】:
igraph 是否有一种算法可以输出有向图中 2 个节点的最低共同祖先?这不是 DAG,它可能有循环。
如果没有,我可以使用 igraph 来确定 LCA 吗?
这是一个示例图:
m <- read.table(row.names=1, header=TRUE, text=
" A B C D E F G H
A 0 1 1 0 0 0 0 0
B 0 0 0 1 1 0 0 0
C 0 0 0 1 0 0 0 0
D 0 0 0 0 0 1 0 0
E 0 0 1 0 0 0 0 0
F 0 0 0 0 1 0 0 0
G 0 0 0 1 0 0 0 1
H 0 0 0 0 0 1 1 0")
m <- as.matrix(m)
ig <- graph.adjacency(m, mode="directed")
plot(ig)
-
如果我要问,节点“E”和“C”共享的最近父节点是什么?答案是“A”或“B”或“F”。
-
节点“G”和“C”共享的最近的父节点呢?答案是“H”。
-
由于我们正在寻找父节点,因此节点不能是它自己的父节点,因此节点“H”和“C”共享的最近父节点将是“G”。
-
最后,节点“A”和“G”共享的最近父节点将是“无”。
附:我不确定在关系的情况下是否有规则。就像节点与父节点的距离分别为 (1,3) 和与另一个父节点的距离为 (2,2)。
【问题讨论】:
-
如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
-
these 中的任何一个都适用于循环吗?
-
@user20650 是的,完全正确。这些图之一,但有循环,所以它们不是树。我需要尝试从头开始制作带有循环的有向图,以提供可重现的示例。我想知道igraph中有没有默认的
-
如果是循环,那么预期的结果是什么?您能否展示一个包含数据和所需输出的示例?
-
为什么
B是E和C的LCA?如果算上B,那么F也应该没问题。
标签: r graph-theory igraph directed-graph graph-traversal