如何使用 python igraph 获取树的子树?

How to obtain a subtree of a tree using python igraph?

我希望有一个简单的函数可以用于此目的(例如 tree.subtree(vertex)),但是我浏览了很长时间的文档也没有找到。

无论如何,我找到了这个解决方法:

subtree = tree.induced_subgraph(tree.subcomponent(vertex, mode='out'))

但这对我来说似乎效率低下,因为 subcomponent() returns 从 vertex 可以到达的顶点列表然后 induced_subgraph() 从这个顶点列表(重新)创建子树.

还有其他想法吗? :)

我认为您正在寻找广度优先搜索,从您的根开始:

[vertices, layers, parents] = g.bfs(root)

您可以合并顶点和父节点以获得新图的边。

但是,我认为这实际上不会更有效率: subcomponent 将基于 BFS,因此 运行 时间没有差异 (O(|V| + |E|)。induced_subgraph 将有一个 运行时间 O(|E|),所以这也与合并顶点和父节点的 运行 时间相同。大 O 符号省略的常数因子会有所不同,当然,但是你的图有多大您认为这些差异可能很重要吗?