Предположим, у нас есть дерево в igraph
:
library(igraph)
g <- make_tree(14, children = 3)
plot(g, layout = layout_as_tree)
Создана 21 декабря 2019 г. с помощью пакета reprex (v0.3.0)
Как найти наименьшего общего предка (LCA) произвольного набора узлов ? То есть в приведенном выше примере
- LCA 7 и 14 равен 2.
- LCA 6, 9, 12 и 14 равен 1.
- LCA 1 и 8 равен 1.
- LCA любого узла — это он сам.
И так далее.
Кажется, что в igraph
должен быть элегантный способ сделать это, но мне не удалось его найти. Я поигрался с пересечениями вызовов all_simple_paths
, но так как у меня нет хорошего способа получить уровни каждого узла, это не помогло.
Я знаю, что многие пакеты филогенетики реализуют это для других структур данных, но я бы предпочел избегать взаимное преобразование, если на графе есть разумное решение. (Однако я вполне доволен решением tidygraph
.)