假设我们有一棵树igraph
:
library(igraph)
g <- make_tree(14, children = 3)
plot(g, layout = layout_as_tree)
由reprex 包(v0.3.0)于 2019 年 12 月 21 日创建
我们如何找到任意节点集合的最低共同祖先(LCA)?也就是说,在上面的例子中
- 7 和 14 的 LCA 为 2。
- 6、9、12 和 14 的 LCA 为 1。
- 1 和 8 的 LCA 为 1。
- 任何节点的 LCA 都是它自己。
等等。
感觉应该有一种优雅的方式来做到这一点igraph
,但我还没有找到它。我玩弄了调用的交集all_simple_paths
,但是由于我没有获得每个节点级别的好方法,所以这没有帮助。
我知道许多系统发育包为其他数据结构实现 了这一点,但如果图表上有合理的解决方案,我宁愿避免相互转换。(不过,我对tidygraph
解决方案非常满意。)