问题描述
我希望有一个用于此目的的简单函数(例如 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 表示法省略的常数因子肯定会有所不同,但是您认为这些差异可能有多大影响?