给定this依赖图:从底部到顶部迭代它的“好”方法是什么?
我对每个“周期”的预期结果是:
Iteration step "1": Project B, Project D, Project Z, Project O
Iteration step "2": Project C, Project W, Project V, Project Q
Iteration step "3": Project A, Project M
Iteration step "4": Start X // End
激荡
// PSEUDO CODE: Find and return "next projects fixes" to perform.
// -> All projects with no or already fixed dependencies.
FUNC FindNextDependciesToFix ( NODE StartNode, BYREF LIST<NODE> RefNextProjectsToFix )
{
... // Algorithm ?
}
“深度优先搜索”不起作用的原因:
DO
{
FindNextDependciesToFix (StartX, FixNextList);
CallASYNCAndWaitForEndOfFix (FixNextList);
// <- Wait till end of project fix (async...)
} WHILE ( FixNextList.IsEmpty() );
算法
我真的不想重新发明轮子:那么是否已经有一种解决这个问题的算法,或者是否有人采用“聪明”的方法?
答案 0 :(得分:1)
您可能希望topological sort浏览依赖关系图。您可以使用DFS(深度优先搜索)和BFS(呼吸优先搜索)来执行此操作 - 这两者都在维基百科链接上的伪代码中提到。两者都是输入大小的线性。
答案 1 :(得分:0)
执行topological sort按顺序给出节点。然后,如果要查找不同深度之间的边界,请使用动态编程算法。该解是图的大小线性的O(| V | + | E |)。