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

问题描述

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

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

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

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

还有其他想法吗? :)

解决方法

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

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

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

但是,我不认为这实际上会更有效率: subcomponent 将基于 BFS,因此那里的运行时间不会有差异 (O(|V| + |E|)。induced_subgraph 将有一个运行时间 O(|E|),所以这也与组合顶点和父节点的运行时间相同。大 O 表示法省略的常数因子肯定会有所不同,但是您认为这些差异可能有多大影响?