简体   繁体   English

networkX 中无向图的参数传递闭包

[英]Parametric transitive closure of an undirected graph in networkX

I am making an undirected graph from existing edges.我正在从现有边缘制作无向图。

G = nx.Graph()
edge_list = [(1,2),(2,3), (3,4), (4,5),(5,6)]
G.add_edges_from(edge_list)

Now I want to perform transitive closure that is parametrized by level k such that k=1 means following new edges will be added.现在我想执行由k级参数化的传递闭包,使得k=1意味着将添加新的边。

new_edge_list = [(1,3),(2,4),(3,5),(4,6)]
G.add_edges_from(new_edge_list)

While k=2 means following new edges would be added.k=2意味着将添加以下新边。

new_edge_list = [(1,3),(1,4),(2,4),(2,5),(3,5), (3,6),(4,6)]
G.add_edges_from(new_edge_list)

This essentially means that as we keep on increasing the value of k , the graph G would eventually become a clique (ie a transitive closure).这实质上意味着随着我们不断增加k的值,图G最终将成为一个团(即传递闭包)。 However, I want to get a transitive closure at a specific level of k .但是,我想在k的特定级别获得传递闭包。 I am able to get full transitive closure using this answer .我能够使用此答案获得完整的传递闭包。 But I am struggling with specific level of transitive closure.但我正在为特定级别的传递闭包而苦苦挣扎。 I am able to achieve k=1 transitive closure by using adjacency representation but that cannot be scaled for k=2 .我能够通过使用邻接表示来实现k=1传递闭包,但无法缩放k=2

PS: It is okay if symmetric edges are also created like [(1,3),(3,1)] during parametric transitive closure. PS:如果在参数传递闭包期间也创建像[(1,3),(3,1)]这样的对称边也没关系。

如果您有一个适用于k = 1情况的工作算法,并且您提到的缩放问题不是由于图本身随着添加更多边而增长而出现的,那么您可以简单地递归使用该算法,作为结果将其应用于k = 1 -case 的输出将是您的k = 2 -case。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM