我是图算法编程领域的初学者。我正在努力解决有关强连接组件的一个有趣问题,并且对此有任何帮助都非常感谢。
在我的应用程序中,目标是尽可能在多个线程上执行任务。这些任务在有向图中表示为节点,并且任务可以具有循环依赖性。通过查找强连接组件然后强制执行预定义规则来删除边缘,可以打破循环依赖关系。这样,强连接组件中的所有任务将最终以串行方式执行。
现在考虑一个示例,其中任务1,2,... 8具有以下依赖模式。 {1 - > 2,2 - > 3,3-> 1,3-> 4,4 - > 5,5-> 6,6-> 4,7 - > 8}。使用强连接组件和预定义规则来破坏循环依赖性,我们得到三组节点,即A = {1 - > 2 - > 3},B = {4 - > 5 - > 6},和C = {7 - > 8},但由于A和B通过边连接,因此无法并行执行。
我想知道是否有任何算法或算法集可用于获取节点集,以便我可以将A和B置于顺序执行中,而C可以与A或B并行执行。根据我的理解,地形排序可能会有所帮助,但它仅用于非循环图。任何建议或帮助都非常感谢。谢谢。
答案 0 :(得分:2)
您使用节点A,B,C等描述的商图总是非循环的:如果它有一个循环,例如涉及A和B,则A中的所有任务都可以从B中的所有任务获得,反之亦然,所以A和B是相同的SCC。 所以,是的,您可以提供该图表。