我查了一下,发现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次评估。