反向拓扑排序算法

时间:2018-07-11 21:03:33

标签: algorithm graph-theory graph-traversal

我正在寻找一种有效的算法来解决依赖图中的一系列模块的依赖,并具有以下约束:

  • 该算法可以将一个或多个起始节点作为输入。
  • 计算这些节点的依赖关系,以便可以并行加载它们。
  • 如果图不是非循环的,则必须引发错误。
  • 它的复杂度应尽可能小(无需访问不需要的节点)–该图可能包含数十亿个节点,每个查询只需要其中的一小部分。

目标示例

在此示例中,提供了两个绿色的节点作为起点。红色节点永远不会访问。访问了白色的每个节点。计划按步骤执行加载(在节点内部指示)。

enter image description here

您对遵循这些规则的算法有任何暗示吗?

1 个答案:

答案 0 :(得分:0)

可以通过使用拓扑排序来解决此问题,这在this维基百科文章中有所描述;请注意,本文从“依赖关系解决方案”重定向。所描述算法的运行时间为

O(|V| + |E|)

其中V是节点集,E是边集,即运行时间与输入大小成线性关系。