如何查找包含给定节点集的最大数量的连接组件

时间:2019-08-02 01:16:59

标签: python networkx digraphs

我有一个包含许多基因及其相互作用的图。我有兴趣找到一个子图,该子图具有一组特定基因的最大值,例如图中的A,B,C,D,E。

尝试过BFS算法以及连接的组件。但是不知道如何找到我感兴趣的基因的子图。

def bfs(G, gene, n):
"""

Using breadth-first search
returns a graph of breadth n starting at source gene.
"""
S = nx.algorithms.traversal.breadth_first_search.bfs_tree(G, source=gene, depth_limit=n)
return S

给定一个具有V个顶点和E个边的图G(V,E),我想找到一个子图G'(v,e),其中v是V的子集,这样G'包含了我的最大节点兴趣。

1 个答案:

答案 0 :(得分:2)

编辑虽然我认为我的原始代码(现在在底部)很好,但是我认为使用node_connected_component(G,u)可以做得更好,该返回的节点集与{ {1}}。

让我解释下面的代码。首先,我将逐步介绍有趣的基因。对于第一个,我寻找它所在的u的组成部分,然后找到相同组成部分中的所有其他有趣基因。然后,当我查看每个后续有趣的基因时,请确保没有在与另一个组件相同的组件中遇到它。如果是一个新组件,我会在同一组件中找到所有其他有趣的基因。最后,我找到了最有趣的基因。

G

看看component_count = {} seen = {} for source in interesting_genes: if source not in seen: reachable_nodes = nx.node_connected_component(G, source) reachable_nodes_of_interest = [target for target in interesting_genes if target in reachable_nodes] for node in reachable_nodes_of_interest: seen[node] = True component_count = len(reachable_nodes_of_interest) source = max(component_count, key=component_count.get) #finds the node with the largest component_count Gprime = G.subgraph(nx.node_connected_component(G, source)) 的{​​{3}}。

single_source_shortest_path_length