我想通过用连接路径起点和终点的边代替每条最长的非分支路径来减少DAG。
例如,对于这样的图形,我想将其缩小
a->b->c->d
a->d
到以下。当然,真正的DAG可能比这更复杂。
a->d
a->d
我找不到使用networkx的方法。有人知道如何在网络中这样做吗?谢谢。
答案 0 :(得分:1)
据我所知,Networkx不开箱即用。但是,实现起来并不太复杂。您可以简单地遍历图中的节点,然后执行以下步骤:
这似乎可行:
def should_remove_node(graph, node):
return graph.in_degree(node) == 1 and graph.out_degree(node) == 1
for node in list(G.nodes()):
if should_remove_node(G, node):
in_node = list(G.in_edges(node))[0][0]
out_node = list(G.out_edges(node))[0][1]
G.add_edge(in_node, out_node)
G.remove_node(node)