如何使用 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 符号省略的常数因子会有所不同,当然,但是你的图有多大您认为这些差异可能很重要吗?
我希望有一个简单的函数可以用于此目的(例如 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 符号省略的常数因子会有所不同,当然,但是你的图有多大您认为这些差异可能很重要吗?