这个question对于检测有向图中的周期有很好的答案。不幸的是,制作Map Reduce版本似乎并不容易。
具体来说,我对Map Reduce算法感兴趣,该算法用于从有向图中删除周期。
我使用广度优先搜索(BFS)算法进行了评估,但我看到的问题是可以同时删除两个不同的边缘以切断循环。这种情况的影响是可以删除太多边缘。重要的是移除循环,同时最小化移除的边缘数量。
首选可提供样张的解决方案!
感谢。
答案 0 :(得分:1)
如果你想删除所有周期,那么你最终会得到一棵树。因此,无论您使用何种算法,都将删除| E | - (n -1)边。 (如果当然是正确的)
然而,问题是边缘的删除是否会导致图形断开。为此,您需要对边缘进行排序(比如说词典顺序)。然后,您应该始终删除循环中的最大边。 [我想正确性的证明是非常直接的:只需使用Kruskal算法并发现它们将是相同的! ]
任何生成树算法都可以为您解决问题。根据您要优化的内容(时间或消息复杂性或任何其他性能指标),您将找到不同的算法。 BFS是时间最好的。对于c> 1,没有算法可以解决小于c(logn + m)消息的问题。 0.
我喜欢用DAG的算法称为YO-YO。该算法的描述可在以下网址找到:http://www.site.uottawa.ca/~flocchin/CSI4509/8-yoyo11_fr.pdf