toposort
有向无环图的拓扑顺序
说明
示例
节点的拓扑排序
创建并绘制一个图,它表示大学数学课程的进阶顺序。两个课程之间的边表示课程要求。
A = [0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0]; names = {'Calculus I','Linear Algebra','Calculus II', ... 'Multivariate Calculus','Topology', ... 'Differential Equations','Real Analysis'}; G = digraph(A,names); plot(G)
找出课程的拓扑排序来确定正确的课程完成顺序。
N = toposort(G)
N = 1×7
1 3 7 2 4 6 5
G.Nodes.Name(N,:)
ans = 7x1 cell
{'Calculus I' }
{'Calculus II' }
{'Real Analysis' }
{'Linear Algebra' }
{'Multivariate Calculus' }
{'Differential Equations'}
{'Topology' }
稳定拓扑排序
使用逻辑邻接矩阵创建有向图,然后绘制图。
rng default;
A = tril(sprand(10, 10, 0.3), -1)~=0;
G = digraph(A);
[~,G] = toposort(G);
plot(G)
找出图节点的拓扑排序。即使 G
已为拓扑顺序 (1 2 3 4 5 6 7 8 9 10)
,toposort
仍会对节点重新排序。
toposort(G)
ans = 1×10
2 1 4 10 9 8 5 7 3 6
指定 Order
作为 'stable'
以使用稳定排序算法,这样会按照较小索引优先的顺序对节点进行排序。稳定排序不对已形成拓扑顺序的 G
进行重新排列。
toposort(G,'Order','stable')
ans = 1×10
1 2 3 4 5 6 7 8 9 10
输入参数
algorithm
— 排序算法
'fast'
(默认) | 'stable'
排序算法,指定为 'fast'
或 'stable'
:
'fast' (默认值) | 基于深度优先搜索。在考虑一个节点的所有后代后,将该节点添加到列表的开头。 如果 |
'stable' | 基于字典编纂顺序。 如果 |
示例: [n,H] = toposort(G,'Order','stable')
输出参量
n
— 节点索引
行向量
节点索引,以行向量形式返回。
H
— 拓扑排序图
digraph
对象
按拓扑方式排序的图,以 digraph
对象形式返回。H
是与 G
相同的图,但根据 n
对节点进行了重新排序。
详细信息
拓扑顺序
有向图的拓扑排序即是对图中节点进行排序,使得每个节点都出现在其后继节点(后代)之前。
假设具有一个有向图,其节点表示任务,边表示各任务完成顺序的依赖关系。对于此类图,对图节点进行拓扑排序会形成一个有效的任务执行序列。
版本历史记录
在 R2015b 中推出
另请参阅
digraph
| isdag
| reordernodes
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)