topological_sort#
- topological_sort(G)[源代码]#
返回拓扑排序顺序的节点生成器。
拓扑排序是有向图的节点的非唯一排列,使得从u到v的边意味着在拓扑排序顺序中u出现在v之前。仅当图没有有向圈时,此排序才有效。
- 参数
- G网络X有向图
有向无环图(DAG)
- 产量
- 节点
以拓扑排序的顺序生成节点。
- 加薪
- NetworkXError
拓扑排序仅为有向图定义。如果该图
G
是无定向的,则为NetworkXError
都被养大了。- NetworkXUnfeasible
如果
G
不是有向无环图(DAG)不存在拓扑排序,并且NetworkXUnfeasible
引发异常。在以下情况下也可以引发此问题G
在处理返回的迭代器时更改- RuntimeError
如果
G
在处理返回的迭代器时发生更改。
笔记
该算法基于《算法导论:创造性方法》中的描述和证明。 [1] 。
工具书类
- 1
Manber,U.(1989年)。 Introduction to Algorithms - A Creative Approach. Addison Wesley。
实例
要获得拓扑排序的逆顺序,请执行以下操作:
>>> DG = nx.DiGraph([(1, 2), (2, 3)]) >>> list(reversed(list(nx.topological_sort(DG)))) [3, 2, 1]
如果您的有向图自然具有表示任务/输入的边缘,以及表示启动任务的人员/流程的节点,那么拓扑排序并不完全符合您的需要。您必须将任务更改为依赖于边的节点。结果是一种拓扑类型的边。这可以用
networkx.line_graph()
如下:>>> list(nx.topological_sort(nx.line_graph(DG))) [(1, 2), (2, 3)]