transitive_reduction#

transitive_reduction(G)[source]#

返回有向图的传递约简

传递约简的定义:G = (V,E) 的传递约简是图 G- = (V,E-),其中对于所有 v,w ∈ V,当且仅当 (v,w) ∈ E 且在 G 中不存在长度大于 1 的从 v 到 w 的路径时,边 (v,w) ∈ E-。

Parameters:
GNetworkX DiGraph

一个有向无环图(DAG)

Returns:
NetworkX DiGraph

G 的传递约简

Raises:
NetworkXError

如果 G 不是有向无环图(DAG),传递约简不唯一,将引发 NetworkXError 异常。

References

https://en.wikipedia.org/wiki/Transitive_reduction

Examples

对一个有向图进行传递约简:

>>> DG = nx.DiGraph([(1, 2), (2, 3), (1, 3)])
>>> TR = nx.transitive_reduction(DG)
>>> list(TR.edges)
[(1, 2), (2, 3)]

为了避免不必要的数据复制,此实现不返回带有节点/边数据的 DiGraph。 对一个有向图进行传递约简并转移节点/边数据:

>>> DG = nx.DiGraph()
>>> DG.add_edges_from([(1, 2), (2, 3), (1, 3)], color="red")
>>> TR = nx.transitive_reduction(DG)
>>> TR.add_nodes_from(DG.nodes(data=True))
>>> TR.add_edges_from((u, v, DG.edges[u, v]) for u, v in TR.edges)
>>> list(TR.edges(data=True))
[(1, 2, {'color': 'red'}), (2, 3, {'color': 'red'})]