循环图中的拓扑排序

时间:2018-12-04 10:33:00

标签: graph dependencies spreadsheet circular-dependency topological-sort

我有一个有向循环图,有不同长度的循环。给定来源,我需要找出顶点的拓扑顺序。

我查了一下,发现UNIX的 tsort 可以做到这一点。因此,对于终端中的以下输入,

tsort << EOF

>1 2

>2 3

>3 1

>1 4

>EOF

我得到以下输出。

tsort: cycle in data 
tsort: 1 
tsort: 2 
tsort: 3 
3 
1 
4 
2

我得到图中的循环以及顶点的拓扑顺序。

我研究了 tsort here的实现。它使用一棵平衡的树。

问题是,我有一个包含数百万个顶点和依存关系边的巨大图形。因此,这可能会为树占用大量额外空间(考虑到我已经有图),并且速度可能很慢。

还有其他有效的方法可以实现这一目标吗?另外,我应该在这里引入另一个参数“ iterations_count ”。因此,在根据拓扑顺序评估顶点时,我应准确遍历循环中的顶点,次数应为 iterations_count 指定的次数。

例如,在上图中,周期为1-2-3,如果迭代次数为3,则我应该对该周期中的顶点进行3次评估。

0 个答案:

没有答案