После некоторых копаний, я думаю, что нашел ответ на свой вопрос. То, что я описывал, - это вариация задачи минимального связующего дерева, называемая проблемой дерева Штейнера .
. Для заданного взвешенного графа G = (V, E), подмножество S ⊆ V вершин и a root r ∈ V, мы хотим найти дерево минимального веса, которое соединяет все вершины из S с r. [ref]
Оказывается, существует пакет R с именем SteinerNet
, созданный специально для этих типов проблем. У меня были проблемы с установкой их пакета напрямую, но я смог скопировать соответствующий исходный код из их GitHub repo .
out <- steinertree(type = "KB", terminals = c(1,3,4,7), graph = tree)
Пакет выполняет именно то, что я хотел, и даже произвел симпатичный график!
>out[[2]]
IGRAPH fbb52e5 UN-- 4 3 -- Tree
+ attr: name (g/c), children (g/n), mode (g/c), name (v/c), color (v/c)
+ edges from fbb52e5 (vertex names):
[3] 1--3 3--4 3--7
>plot(out[[1]])