【问题标题】:Parametric transitive closure of an undirected graph in networkXnetworkX中无向图的参数传递闭包
【发布时间】:2019-04-06 18:09:39
【问题描述】:

我正在从现有边制作一个无向图。

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

现在我想执行由级别k 参数化的传递闭包,这样k=1 意味着将添加以下新边。

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

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)

这实质上意味着,随着我们不断增加 k 的值,图 G 最终将成为一个集团(即传递闭包)。但是,我想在k 的特定级别获得传递闭包。我可以使用this answer 获得完全传递闭包。但我正在为特定级别的传递闭包而苦苦挣扎。我可以通过使用adjacency 表示来实现k=1 传递闭包,但不能针对k=2 进行缩放。

P.S:如果在参数传递闭包期间也像 [(1,3),(3,1)] 一样创建对称边也没关系。

【问题讨论】:

  • 您遇到了哪些扩展问题? (如果您有适用于k = 1-case 的有效算法,您不能重复一遍吗;使用k = 1-closure 的输出作为相同算法的输入,其输出将是k = 2-关闭?)
  • 天啊!是的....我将通过递归调用获得所需的结果。我相信睡眠不足会影响基本思维!!!谢谢!
  • 太棒了。那么请允许我将其添加为答案,以避免将问题标记为仍然未解决。

标签: python networkx graph-theory


【解决方案1】:

如果您有适用于k = 1 案例的有效算法,并且您提到的缩放问题不会因为添加更多边时图形本身的增长而出现,那么您可以简单地递归使用该算法,如将其应用于k = 1-case 的输出的结果将是您的k = 2-case。

【讨论】:

  • 是的,对k=1 的结果的递归调用会产生k=2 的结果,依此类推。再次感谢!
猜你喜欢
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多